ファイル名の拡張子を取得します。

ファイル名の拡張子を取得します。

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

おすすめ記事