ファイル/from/here/to/there.txt
があり、そのディレクトリ名の最後の部分/from/here/to
ではなくto
だけを取得したい場合、どうすればよいですか?
ファイルではありませんが、basename
を使用できます。 dirname
を使用してファイル名を取り除き、basename
を使用して文字列の最後の要素を取得します。
dir="/from/here/to/there.txt"
dir="$(dirname $dir)" # Returns "/from/here/to"
dir="$(basename $dir)" # Returns just "to"
bash
文字列関数の使用:
$ s="/from/here/to/there.txt"
$ s="${s%/*}" && echo "${s##*/}"
to
dirname
の反対はbasename
です:
basename "$(dirname "/from/here/to/there.txt")"
純粋なBASHの方法:
s="/from/here/to/there.txt"
[[ "$s" =~ ([^/]+)/[^/]+$ ]] && echo "${BASH_REMATCH[1]}"
to
Bash parameter expansion を使用すると、次のことができます。
path="/from/here/to/there.txt"
dir="${path%/*}" # sets dir to '/from/here/to' (equivalent of dirname)
last_dir="${dir##*/}" # sets last_dir to 'to' (equivalent of basename)
外部コマンドが使用されないため、これはより効率的です。
もう一つの方法
IFS=/ read -ra x <<<"/from/here/to/there.txt" && printf "%s\n" "${x[-2]}"
awk
の方法は次のとおりです。
awk -F'/' '{print $(NF-1)}' <<< "/from/here/to/there.txt"
説明:
-F'/'
はフィールド区切り文字を「/」に設定します$(NF-1)
を出力します<<<
はその後のすべてを標準入力として使用します( wikiの説明 )この質問は THIS のようなものです。
あなたができることを解決するために:
DirPath="/from/here/to/there.txt"
DirPath="$(dirname $DirPath)"
DirPath="$(basename $DirPath)"
echo "$DirPath"
私の友人が言ったように、これも同様に可能です:
basename `dirname "/from/here/to/there.txt"`
パスの一部を取得するには、次のようにします。
echo "/from/here/to/there.txt" | awk -F/ '{ print $2 }'
OR
echo "/from/here/to/there.txt" | awk -F/ '{ print $3 }'
OR
etc