Linux:复制并创建目标目录(如果不存在)

我想要创建目标目录(如果不存在)的命令(或cp的选项)。


例:


cp -? file /path/to/copy/file/to/is/very/deep/there


冉冉说
浏览 3766回答 3
3回答

qq_花开花谢_0

mkdir -p "$d" && cp file "$d"()没有此类选项cp。

aluckdog

简短答案要复制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" "$_"
打开App,查看更多内容
随时随地看视频慕课网APP