假设我在/var/www/foo
,我想创建/tmp/foo
。有没有办法以编程方式执行此操作,最终得到mkdir /tmp/[insert something here]
等命令?
答案 0 :(得分:3)
mkdir /tmp/`basename $(pwd)`
(请注意,它们是反叛,而不是前锋。)
这是有效的,因为反引号会执行命令替换。它基本上运行反引号中的东西,并用命令运行中的标准替换它。在这种情况下,basename
命令具有当前工作路径。并且$(…)
与反引号完全相同。
basename
命令“strip目录和文件名后缀”。 (见http://unixhelp.ed.ac.uk/CGI/man-cgi?basename)
您也可以使用(如果您不想使用反引号):
mkdir /tmp/$(basename $(pwd))
请注意,如果当前目录的路径包含空格或其他特殊字符,则需要将命令替换为双引号:
mkdir "/tmp/$(basename "$(pwd)")"
答案 1 :(得分:0)
$PWD
始终包含当前目录的完整路径。因此${PWD##*/}
($PWD
除了最后一个/
之外的部分)是当前目录的名称。
mkdir "/tmp/${PWD##*/}"
如果您知道当前目录的名称不包含任何空格或任何字符*?\[
,则可以省略双引号。
在zsh中,有一种更简单的方法来提取路径的最后一个组件:
mkdir -- /tmp/$PWD:t