在Bash中的文件路径参数中获取最后一个dirname / filename

时间:2010-07-20 20:25:50

标签: linux bash shell svn

我正在尝试为SVN编写一个post-commit挂钩,它挂在我们的开发服务器上。我的目标是尝试自动将已提交项目的副本签出到服务器上托管的目录。但是,我需要能够只读取传递给脚本的目录字符串中的最后一个目录,以便签出到托管我们项目的同一子目录。

例如,如果我对项目“example”进行SVN提交,我的脚本会将“/ usr / local / svn / repos / example”作为其第一个参数。我需要在字符串的末尾添加“示例”,然后用另一个字符串连接它,这样我就可以签出到“/ server / root / example”并立即查看更改。

3 个答案:

答案 0 :(得分:291)

basename会删除路径的目录前缀:

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

答案 1 :(得分:69)

Bash可以获取路径的最后一部分而无需调用外部basename

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

答案 2 :(得分:68)

以下方法可用于获取路径名的任何路径:

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

输出:

c
b
a