linux 无法穿件目录,Linux:复制并创建目标目录(如果不存在)

简短答案

要复制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" "$_"

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值