回答:
dirname $file
あなたが探しているものです
dirname "$file"
むしろ。引用符がないと、ファイル名またはディレクトリ名にスペースが含まれていると、これは正しく動作しません。
dirname $file
出力されます
stuff/backup
これは反対ですbasename
:
basename $file
出力します
file.zip
${file%/*}
外部コマンドに依存しないので、Urvin / LuFFyによって提案されたようなものを使用することは技術的に優れています。同じ方法でベース名を取得するには、次のようにします${file##*/}
。必要がない限り、外部コマンドを使用する必要はありません。
file="/stuff/backup/file.zip"
filename=${1##*/} # file.zip
directory=${1%/*} # /stuff/backup
この方法でも、POSIXに完全に準拠します。それが役に立てば幸い!:-)
dirname
ます。それは、パスが最初から完全に修飾されているかどうかわからない場合です。あなたが持っている場合はfile=file.zip
、dirname "$file"
返され.
、一方、${file%/*}
戻りますfile.zip
。
case $file in */*) dir=${file%/*};; *) dir=.;; esac
はまだPOSIX-yであり、問題に対処しています。
単に使う $ dirname /home/~username/stuff/backup/file.zip
戻ります /home/~username/stuff/backup/
dirname $file