web-dev-qa-db-ja.com

bashでファイル拡張子をチェックする最も簡単な方法は?

ファイルが圧縮されている(.gzで終わる)場合は1つのコマンドを実行し、そうでない場合は別のコマンドを実行する必要があるシェルスクリプトがあります。私はこれにどのようにアプローチするのか本当に分かりません、ここに私が探しているものの概要があります:

file=/path/name*

if [ CHECK FOR .gz ]
then echo "this file is zipped"
else echo "this file is not zipped"
fi
18
Liam

=~テスト内で[[...]]演算子を使用して、単純な正規表現でこれを行うことができます。

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
41
rici

本当に、シェルスクリプトでこのようなパターンに一致する最も明確で最も簡単な方法は、caseを使用することです。

case "$f" in
*.gz | *.tgz ) 
        # it's gzipped
        ;;
*)
        # it's not
        ;;
esac
26
jthill

次のようなものを試すことができます:-

if [[ ${file: -3} == ".gz" ]]
11
Rahul Tripathi