2016-11-21 129 views
0

该目录的名称是已知的,并且已知此目录中的所有文件具有相同的扩展名。我只需要提取一个扩展名并将其分配给一个变量。如何提取目录中文件的扩展名?

我有一个脚本,根据目录的内容采取不同的例程。例如,如果该文件夹包含jpg文件,则该脚本将在tiff文件上执行不同的操作。我的脚本不需要知道文件名或数字,只需知道它们的扩展名。所以我需要提取任何一个文件的扩展名(所有文件具有相同的扩展名),并将其分配给一个变量。

我试图做这样的事情:

variable=$(basename "/path/dir/*") 
extension="${variable##*.}" 

其中"*"通配符列出的所有文件。我只需要一个扩展。

+0

你是什么意思决定未知文件的扩展名?有'file'命令告诉你文件的类型。你是否要求一个只提取给定文件名的扩展名的bash脚本? – varlogtim

+0

目录是已知的,文件名是未知的,不需要知道名称或有多少。我的脚本中只需要其中一个文件扩展名。 – siamak

+2

您能否提供一个目录内容的例子以及脚本中需要的内容? – varlogtim

回答

0
extension=$(ls directory_path/ | awk -F. 'NR==1{print $NF}') 
0

您可以使用awk找到扩展名。

for file in directory/*.*; do 
    var=$(echo $file | awk 'BEGIN{FS="."} {print $NF}') 
    break 
done 

在这个例子中,FS告诉awk使用句点“。”分隔字段,$ NF指定最后一个字段。

+0

谢谢。不幸的是,它给了我一个语法错误“附近有意想不到的令牌的语法错误”。 – siamak

+0

奇怪。您可以将“do”移动到它自己的行并从第一行的末尾移除分号,以查看是否改变了任何内容。另外请注意,我必须编辑示例,因为我忘记了第二行中的最后一个单引号,因此请确保您尝试了更新后的版本。如果没有其他的工作,尝试发布你正在运行的确切命令(目录文本和所有)? – Guest

+0

谢谢你的工作。我猜在{print $ NF}之后缺少“'”。 – siamak

0
file=$(find directory -maxdepth 1 -mindepth 1 -type f -print -quit) 
ext="${file##*.}" 

find命令查找在directory第一个文件,打印路径和退出。结果(路径)写入file变量。

下一行删除路径前面的最长匹配*.,并将结果赋给ext变量。

根据需要调整-maxdepth-mindepth选项。

相关问题