96

ファイル があり、そのディレクトリ名の最後の部分だけを ではなく/from/here/to/there.txt取得したい場合、どうすればよいですか?to/from/here/to

4

9 に答える 9

143

ファイルでなくても使えbasenameます。を使用してファイル名を削除しdirname、 を使用basenameして文字列の最後の要素を取得します。

dir="/from/here/to/there.txt"
dir="$(dirname $dir)"   # Returns "/from/here/to"
dir="$(basename $dir)"  # Returns just "to"
于 2014-04-18T21:20:21.967 に答える
27

の反対dirnameは次のbasenameとおりです。

basename "$(dirname "/from/here/to/there.txt")"
于 2014-04-18T21:07:11.937 に答える
23

bash文字列関数の使用:

$ s="/from/here/to/there.txt"
$ s="${s%/*}" && echo "${s##*/}"
to
于 2014-04-18T21:23:18.257 に答える
4

純粋な BASH の方法:

s="/from/here/to/there.txt"
[[ "$s" =~ ([^/]+)/[^/]+$ ]] && echo "${BASH_REMATCH[1]}"
to
于 2014-04-18T21:16:17.370 に答える
3

それを行うawk方法は次のとおりです。

awk -F'/' '{print $(NF-1)}' <<< "/from/here/to/there.txt"

説明:

  • -F'/'フィールドセパレータを「/」に設定します
  • 最後から 2 番目のフィールドを出力する$(NF-1)
  • <<<それ以降は標準入力として使用します ( wiki の説明)
于 2014-04-19T01:19:15.780 に答える
2

もう一つの方法

IFS=/ read -ra x <<<"/from/here/to/there.txt" && printf "%s\n" "${x[-2]}"
于 2014-04-18T22:17:10.937 に答える
1

この質問は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
于 2014-04-19T04:14:39.697 に答える