即使存在多个扩展组合,我也需要识别具有不同扩展名的文件 所以如果我的cwd有这个文件:
file-1 .zip
file-2 .tar
file-3 .tar.gz
file-4 .gz
file-5 .zip.tar
file-6 .tar.gz
file-7 .gz
我需要告诉bash当扩展名(在这种情况下)是:
时该做什么
因为对于每个扩展我需要做不同的事情,这意味着如果扩展名是.tar(仅)或.gz(仅)我需要做某些事情,但如果扩展名是.tar.gz我需要运行另一个片段。
例如: 如果文件名有.tar扩展名我需要做
# stuff
tar xf filename.tar
# other stuff
如果文件名有.zip.tar扩展名,我需要运行更复杂的代码(但代码并不完全依赖于扩展名,我唯一的目标是获取文件名的完整扩展名(filename.tar.gz应该返回.tar.gz而不是.gz或.tar)
另外,有没有办法使用gawk?
答案 0 :(得分:3)
使用case
:
case "$filename" in
*.tar.gz) code for .tar.gz ;;
*.gz) code for .gz ;;
*.zip.tar) code for .zip.tar ;;
*.tar) code for .tar ;;
...
esac
只需确保将组合扩展放在它们包含的单个扩展之前,因为case
执行匹配的第一个模式的语句。
答案 1 :(得分:0)
file
命令是检测文件类型的好选择,然后您可以编写逻辑
file -i test.*
test.gz: application/x-gzip; charset=binary
test.tar: application/x-tar; charset=binary
test.tar.gz: application/x-gzip; charset=binary
test.zip: application/zip; charset=binary