根据扩展名识别文件

时间:2018-04-06 22:53:56

标签: linux bash shell awk

即使存在多个扩展组合,我也需要识别具有不同扩展名的文件 所以如果我的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当扩展名(在这种情况下)是:

时该做什么
  • 拉链
  • 焦油
  • zip.tar
  • 的tar.gz
  • GZ


因为对于每个扩展我需要做不同的事情,这意味着如果扩展名是.tar(仅)或.gz(仅)我需要做某些事情,但如果扩展名是.tar.gz我需要运行另一个片段。

例如: 如果文件名有.tar扩展名我需要做

# stuff
tar xf filename.tar
# other stuff

如果文件名有.zip.tar扩展名,我需要运行更复杂的代码(但代码并不完全依赖于扩展名,我唯一的目标是获取文件名的完整扩展名(filename.tar.gz应该返回.tar.gz而不是.gz或.tar)

另外,有没有办法使用gawk?

2 个答案:

答案 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