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

例子:

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

当前回答

可以在Perl中使用find。命令如下所示:

find file | perl -lne '$t = "/path/to/copy/file/to/is/very/deep/there/"; /^(.+)\/.+$/; `mkdir -p $t$1` unless(-d "$t$1"); `cp $_ $t$_` unless(-f "$t$_");'

如果目录$t不存在,该命令将创建该目录。然后只将文件复制到$t中,除非文件存在于$t中。

其他回答

install -D file -m 644 -t /path/to/copy/file/to/is/very/deep/there

rsync file /path/to/copy/file/to/is/very/deep/there

如果您有正确的rsync类型,这可能会起作用。

可以在Perl中使用find。命令如下所示:

find file | perl -lne '$t = "/path/to/copy/file/to/is/very/deep/there/"; /^(.+)\/.+$/; `mkdir -p $t$1` unless(-d "$t$1"); `cp $_ $t$_` unless(-f "$t$_");'

如果目录$t不存在,该命令将创建该目录。然后只将文件复制到$t中,除非文件存在于$t中。

只需在你的.bashrc中添加以下代码,如果需要可以调整。适用于Ubuntu。

mkcp() {
    test -d "$2" || mkdir -p "$2"
    cp -r "$1" "$2"
}

如 如果您想将“test”文件复制到目标目录“d” 使用,

mkcp test a/b/c/d

MKCP将首先检查目标目录是否存在,如果不存在则创建并复制源文件/目录。

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

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