如何在复制文件的同时创建目标目录?

如何在复制文件的同时创建目标目录?

cp aaa/deep/sea/blob.psd我想要bbb/deep/sea/blob.psd

deep如果和sea目录不存在,如何进行复制bbb,以便复制既创建所需的目录并复制文件?

现在我已经
No such file or directory很深了,海并不存在。

我浏览了帮助页面和其他问题,但什么也没引起我的注意。

我得到的最接近的是rcp用于目录:

rcp -r aaa/deep/sea/ bbb/deep/sea/

虽然这会复制整个目录和内容,但我只想要一个文件。然而尝试这样做却给出了cp: cannot create regular file bbb/deep/sea/blob.psd' such file or directory

答案1

install使用该程序很容易核心工具通常由诸如此类的构建系统用于此目的汽车制造商:

install -D /path/to/source /path/to/destination

请注意install创建全部路径的一部分就像mkdir -p一样,请参阅man install。我很好奇你为什么不包括为什么你想这么做。打电话mkdir非常cp方便。

答案2

尝试在这种情况下使用这样的下一个函数:

copy_wdir() { mkdir -p -- "$(dirname -- "$2")" && cp -- "$1" "$2" ; }

并将其用作

copy_wdir aaa/deep/sea/blob.psd bbb/deep/sea/blob.psd

顺便说一句,GNUcp有一个--parents选项。它确实很接近你想要的,但又不完全是。
它还会创建aaa您似乎不需要的目录。但是,您可以先 cdaaa并复制如下:

cd aaa && cp --parents deep/sea/blob.psd ../bbb/

答案3

使用标准 (POSIX/Unix) 命令,您可以获得:

pax -rws ':^:dest/dir/:' file .

答案4

cd aaa
pax -rw deep/sea/blob.psd ../bbb

如果您没有pax(这是 POSIX 强制要求的,作为 cpio 和 tar 的标准替代品,因为它们有太多不兼容性需要标准化),请使用cpio -ptar -cf - … | tar -xf -代替。

相关内容