Bashでファイル拡張子を取得するには?私が試したことは次のとおりです。
filename=`basename $filepath`
fileext=${filename##*.}
これにより、bz2
パスから拡張が得られますが、/dir/subdir/file.bz2
パスに問題があります/dir/subdir/file-1.0.tar.bz2
。
可能であればbashのみを使用し、外部プログラムは使用しないソリューションを好みます。
私の問題を明確に説明するために、単一のコマンドで特定のアーカイブを抽出できるbashスクリプトを作成していますextract path_to_file
。ファイルの抽出方法は、圧縮またはアーカイブの種類(.tar.gz、.gz、.bz2など)を確認してスクリプトによって決定されます。私はこれに文字列操作を含めるべきだと思います。たとえば、拡張を取得したら、その前に対応する文字列があることを.gz
確認する必要があります。もしそうなら、拡張は。.tar
.gz
.tar.gz
ベストアンサー1
拡張子を2回抽出する代わりに、ファイル名のみをパターンマッチングして問題を単純化できます。
case "$filename" in
*.tar.bz2) bunzip_then_untar ;;
*.bz2) bunzip_only ;;
*.tar.gz) untar_with -z ;;
*.tgz) untar_with -z ;;
*.gz) gunzip_only ;;
*.zip) unzip ;;
*.7z) do something ;;
*) do nothing ;;
esac