我有一个shell脚本,如果文件是压缩的(以.gz结尾),我需要执行一个命令,如果不是,则需要执行另一个命令。我不确定如何处理这个,这里是我正在寻找的概述:
file=/path/name*
if [ CHECK FOR .gz ]
then echo "this file is zipped"
else echo "this file is not zipped"
fi
答案 0 :(得分:41)
您可以使用简单的正则表达式,使用=~
测试中的[[...]]
运算符执行此操作:
if [[ $file =~ \.gz$ ]];
如果您关注此扩展名.tgz
,则无法为您提供正确的答案。但它很容易解决:
if [[ $file =~ \.t?gz$ ]];
正则表达式周围没有引号是必要且重要的。你可以引用$file
,但没有意义。
使用file
实用程序可能会更好:
$ file --mime-type something.gz
something.gz: application/x-gzip
类似的东西:
if file --mime-type "$file" | grep -q gzip$; then
echo "$file is gzipped"
else
echo "$file is not gzipped"
fi
答案 1 :(得分:26)
真的,在shell脚本中匹配这样的模式的最清晰且最简单的方法是使用case
case "$f" in
*.gz | *.tgz )
# it's gzipped
;;
*)
# it's not
;;
esac
答案 2 :(得分:11)
您可以尝试这样的事情: -
if [[ ${file: -3} == ".gz" ]]