ファイルの親ディレクトリの名前だけを取得したいのですが。
例:path=/a/b/c/d/file
がある場合、/a/b/c/d
(dirname $path
から取得)ではなくd
のみを出力として出力します。
これを行うための洗練された方法はありますか?
ベース名of dirnameが必要なようです:
$ filepath=/a/b/c/d/file
$ parentname="$(basename "$(dirname "$filepath")")"
$ echo "$parentname"
d
これはリソースの少ないソリューションだと思います:
$ filepath=/a/b/c/d/file
$ echo ${${filepath%/*}##*/}
d
編集:申し訳ありませんが、bashではネストされた展開はできませんが、zshでは機能します。バッシュバージョン:
$ filepath=/a/b/c/d/file
$ path=${filepath%/*}
$ echo ${path##*/}
d
Bashでは、1行で:
$ dirname /a/b/c/d/file | sed 's,^\(.*/\)\?\([^/]*\),\2,'
上記のJulian67の答えが一番好きですが、これは少し拡張されたバージョンです。
file_path = "a/b/c/d/file.txt"
parent=$(echo $file_path | sed -e 's;\/[^/]*$;;') # cut away "/file.txt";'$' is end of string
parent=$(echo $parent | sed -e 's;.*\/;;') # cut away "/a/b/c/"
echo $parent # --> you get "d"