拡張子とパスのないファイル名だけを取得するにはどうすればよいですか?
次の例では拡張子は表示されませんが、パスは添付されています。
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
(ファイル拡張子) を設定します。