Get extension of files in Bash
本问题已经有最佳答案,请猛点这里访问。
我正在编写一个脚本,它将按扩展名对文件进行排序。我知道用文件名来实现这一点的方法。问题是,同一个文件的名称中没有扩展名。例如,如果我有文件:
没有bashisms
1 2 3 4 | case $filename in (*.*) extension=${filename##*.};; (*) extension="";; esac |
公司在任何伯恩的遗产的外壳。
你可以把文件的基名称的城市扩展的解,解,从原始的。
1 2 | base=${filename%.*} ext=${filename#$base.} |
在
1 2 3 | filename="file.txt" ext="${filename##*.}" if [["$ext" !="$filename" ]]; then echo"$ext"; else echo"no extension"; fi |
输出:
1 | txt |
1 2 3 | filename="file" ext="${filename##*.}" if [["$ext" !="$filename" ]]; then echo"$ext"; else echo"no extension"; fi |
输出:
1 | no extension |
一类情况:
1 2 | $ ls file* file1 file1.txt file2 |
之类的东西,你可以做的:
1 2 3 4 | $ ls file* |awk -F. '{print (NF>1?$NF:"no extension")}' no extension txt no extension |
它只表明你是问如何把这两个文件的文件名扩展到一个变量在bash,-你是不是要求(3方。 这样做,下面的简短的脚本可以打印的扩展(每个文件从一个文件列表。
1 2 3 4 5 6 | #!/bin/sh filesInCurrentDir=`ls` for file in $filesInCurrentDir; do extention=`sed 's/^\w\+.//' <<<"$file"` echo"the extention for $file is:"$extention #for debugging done |
"这是《extention包含变量的流文件analysed
实例
当前文件夹的内容(这可能是任何空间分隔的列表文件,你的反馈回路)
1 2 3 4 5 6 7 8 9 10 11 | aaab.png abra anme2.jpg cadabra file file.png file.txt loacker.png myText name.pdf rusty.jgp |
结果:以上脚本
1 2 3 4 5 6 7 8 9 10 11 | the extention of aaab.png is: png the extention of abra is: the extention of anme2.jpg is: jpg the extention of cadabra is: the extention of file is: the extention of file.png is: png the extention of file.txt is: txt the extention of loacker.png is: png the extention of myText is: the extention of name.pdf is: pdf the extention of rusty.jgp is: jgp |
在这种方式中,没有将文件与推广的结果变量的扩展有空。