我需要一个命令(可能是cp的一个选项)来创建目标目录(如果目标目录不存在)。

例子:

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

当前回答

我也有同样的问题。我的方法是把这些文件压缩成一个存档,就像这样:

tar cf你档案。tar file1 /path/to/file2路径/to/even/deeper/file3

Tar自动将文件存储在归档文件中的适当结构中。如果你跑了

Tar xf your_archive.tar

文件被提取到所需的目录结构中。

其他回答

正如上面help_asap和sponge所建议的,你可以使用'install'命令将文件复制到现有目录中,或者如果目标目录不存在,则创建新的目标目录。

选项1 安装-D filename some/deep/directory/filename 将文件复制到新的或现有目录,并赋予文件名默认的755权限

选项2 安装-D filename -m640 some/deep/directory/filename 按照选项1,但给文件名640权限。

选项3 安装-D filename -m640 -t some/deep/directory/ 根据选项2,但目标文件名到目标目录,所以文件名不需要写在源和目标。

选项4 install -D filena* -m640 -t some/deep/directory/ 与选项3相同,但对多个文件使用通配符。

它在Ubuntu中工作得很好,将两个步骤(创建目录和复制文件)合并为一个步骤。

Oneliner创建一个小脚本,可以用作子命令,在find例如:

组+ H;Echo -e "#!/bin/sh\nmkdir -p \$(dirname \"\$2\");Cp \"$ 1\" \"$2\"\;"> ~ /地方/ bin / cpmkdir;Chmod +x ~/local/bin/cpmkdir . sh

然后你可以这样使用它:

查找name files_you_re_lookin_for。* -exec cpmkdir {} ./ extracted_copy / {} \;

比如说你在做

cp file1.txt A/B/C/D/文件txt

其中A/B/C/D是还不存在的目录

一个可能的解决方案如下

DIR=$(dirname A/B/C/D/file.txt)
# DIR= "A/B/C/D"
mkdir -p $DIR
cp file1.txt A/B/C/D/file.txt

希望有帮助!

Shell函数,做你想要的,称它为“埋葬”副本,因为它为文件挖了一个洞:

bury_copy() { mkdir -p `dirname $2` && cp "$1" "$2"; }
mkdir -p "$d" && cp file "$d"

(cp没有这样的选项)。