3 回答
TA贡献1847条经验 获得超7个赞
简短答案
要复制myfile.txt到/foo/bar/myfile.txt,请使用:
mkdir -p /foo/bar && cp myfile.txt $_
这是如何运作的?
这有几个组成部分,因此我将逐步介绍所有语法。
POSIX标准中指定的mkdir实用程序创建目录。的说法,每文档,会造成MKDIR到-p
创建任何缺少的中间路径名组件
意味着在调用时mkdir -p /foo/bar,mkdir将创建/foo , /foo/bar如果/foo尚不存在。(如果没有-p,它将抛出错误。
如POSIX标准(或Bash手册,如果您愿意)&&中所述,列表运算符的作用是只有成功执行后才能执行。这意味着如果由于失败的多种原因之一而失败,该命令将不会执行。cp myfile.txt $_mkdir -p /foo/barcpmkdir
最后,$_作为第二个参数传递的cp是“特殊参数”,它可以避免重复长参数(如文件路径)而不必将其存储在变量中。根据Bash手册,它:
扩展到上一个命令的最后一个参数
在这种情况下,这就是/foo/bar我们传递给的mkdir。因此,cp命令将扩展为cp myfile.txt /foo/bar,将复制myfile.txt到新创建的/foo/bar目录中。
请注意,$_是不是 POSIX标准的一部分,所以理论上Unix的变种可能具有不支持此构建物的外壳。但是,我不知道任何不支持的现代外壳$_;当然Bash,Dash和zsh都可以。
最后一点:在此答案开头给出的命令假定您的目录名称中没有空格。如果要处理带有空格的名称,则需要用引号将它们引起来,不会被视为mkdir或的不同参数cp。因此,您的命令实际上如下所示:
mkdir -p "/my directory/name with/spaces" && cp "my filename with spaces.txt" "$_"
- 3 回答
- 0 关注
- 3840 浏览
添加回答
举报