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 -p
或tar -cf - … | tar -xf -
代替。