私はファイルを持っていると仮定/from/here/to/there.txt
し、そのdirnameのの最後の部分だけを取得したいto
の代わりに/from/here/to
、私は何をすべきでしょうか?
私はファイルを持っていると仮定/from/here/to/there.txt
し、そのdirnameのの最後の部分だけを取得したいto
の代わりに/from/here/to
、私は何をすべきでしょうか?
回答:
basename
ファイルでなくても使えます。を使用してファイル名を削除しdirname
、を使用basename
して文字列の最後の要素を取得します。
dir="/from/here/to/there.txt"
dir="$(dirname $dir)" # Returns "/from/here/to"
dir="$(basename $dir)" # Returns just "to"
dir
それを設定しているとき、私は前にドルを持っているべきではありませんでした。
Bashパラメーター展開を使用すると、次のことができます。
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)
外部コマンドが使用されないため、これはより効率的です。
純粋なBASHの方法:
s="/from/here/to/there.txt"
[[ "$s" =~ ([^/]+)/[^/]+$ ]] && echo "${BASH_REMATCH[1]}"
to
.
。ディレクトリにドットがある場合は機能しません.
。シンプルに保ち/
、区切り文字としてスラッシュを使用します。
もう1つの方法
IFS=/ read -ra x <<<"/from/here/to/there.txt" && printf "%s\n" "${x[-2]}"
printf "%s\n" "${x[-2]}"
。
この質問はのようなものです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
一番上の答えは、尋ねられた質問に対して絶対的に正しいです。長いパスの途中に必要なディレクトリがある、より一般的なケースでは、このアプローチはコードを読みにくくします。例えば :
dir="/very/long/path/where/THIS/needs/to/be/extracted/text.txt"
dir="$(dirname $dir)"
dir="$(dirname $dir)"
dir="$(dirname $dir)"
dir="$(dirname $dir)"
dir="$(dirname $dir)"
dir="$(basename $dir)"
この場合、次のものを使用できます。
IFS=/; set -- "/very/long/path/where/THIS/needs/to/be/extracted/text.txt"; set $1; echo $6
THIS