web-dev-qa-db-ja.com

Bashのファイルパス引数で最後のdirname / filenameを取得する

私たちの開発サーバーでホストされているSVNのためのpost-commitフックを書いています。私の目標は、コミットされたプロジェクトのコピーを、サーバー上でホストされているディレクトリに自動的にチェックアウトすることです。ただし、プロジェクトがホストされているのと同じサブディレクトリにチェックアウトするには、スクリプトに渡されたディレクトリ文字列の最後のディレクトリのみを読み取ることができる必要があります。

たとえば、SVNをプロジェクト "example"にコミットすると、私のスクリプトは最初の引数として "/ usr/local/svn/repos/example"を取得します。 "/ server/root/example"にチェックアウトしてすぐに変更が反映されるように、文字列の終わりから "example"を取り出して別の文字列と連結する必要があります。

184
tj111

basename はパスのディレクトリプレフィックスを削除します。

$ basename /usr/local/svn/repos/example
example
$ echo "/server/root/$(basename /usr/local/svn/repos/example)"
/server/root/example
293
sth

Bashは外部のbasenameを呼び出さなくてもパスの最後の部分を取得できます。

subdir="/path/to/whatever/${1##*/}"
69

パス名の任意のパスを取得するには、次の方法を使用できます。

pathname=a/b/c
echo $(basename $pathname)
echo $(basename $(dirname $pathname))
echo $(basename $(dirname $(dirname $pathname)))

出力:

c
b
a
69
Jingguo Yao