web-dev-qa-db-ja.com

ファイルの親ディレクトリを取得します

ファイルの親ディレクトリの名前だけを取得したいのですが。

例:path=/a/b/c/d/fileがある場合、/a/b/c/ddirname $pathから取得)ではなくdのみを出力として出力します。

これを行うための洗練された方法はありますか?

25
shraddha

ベース名of dirnameが必要なようです:

$ filepath=/a/b/c/d/file
$ parentname="$(basename "$(dirname "$filepath")")"
$ echo "$parentname"
d
27
Gordon Davisson

Pwdを使用して現在の作業ディレクトリを取得し、 パラメータ展開 を使用して別の(サブ)シェルにフォークされないようにすることができます。

echo ${PWD##*/}

編集: 実証済みのソース

5
fire

これはリソースの少ないソリューションだと思います:

 $ filepath=/a/b/c/d/file
 $ echo ${${filepath%/*}##*/}
 d

編集:申し訳ありませんが、bashではネストされた展開はできませんが、zshでは機能します。バッシュバージョン:

 $ filepath=/a/b/c/d/file
 $ path=${filepath%/*}
 $ echo ${path##*/}
 d
2
uzsolt

Bashでは、1行で:

$ dirname /a/b/c/d/file | sed 's,^\(.*/\)\?\([^/]*\),\2,'
1
julian67

上記の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"