Bashスクリプトのパスからファイル名だけを取得する [重複] 質問する

Bashスクリプトのパスからファイル名だけを取得する [重複] 質問する

拡張子とパスのないファイル名だけを取得するにはどうすればよいですか?

次の例では拡張子は表示されませんが、パスは添付されています。

source_file_filename_no_ext=${source_file%.*}

ベストアンサー1

多くの UNIX 系オペレーティング システムには、basename非常によく似た目的 (およびdirnameパス) の実行可能ファイルがあります。

pax> full_name=/tmp/file.txt
pax> base_name=$(basename ${full_name})
pax> echo ${base_name}
file.txt

残念ながら、これでは拡張子を含むファイル名しか表示されないため、拡張子も削除する方法を見つける必要があります。

したがって、いずれにせよそうしなければならないのであれば、パスと拡張子を削除できる方法を見つけたほうがよいでしょう。

それを実行する 1 つの方法 (これはbashのみのソリューションであり、他の実行可能ファイルは必要ありません) は次のとおりです。

pax> full_name=/tmp/xx/file.tar.gz
pax> xpath=${full_name%/*} 
pax> xbase=${full_name##*/}
pax> xfext=${xbase##*.}
pax> xpref=${xbase%.*}
pax> echo "path='${xpath}', pref='${xpref}', ext='${xfext}'"

path='/tmp/xx', pref='file.tar', ext='gz'

この小さなスニペットはxpath、(ファイル パス)、xpref(ファイル プレフィックス、具体的に要求した内容)、およびxfext(ファイル拡張子) を設定します。

おすすめ記事