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

例子:

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

当前回答

只是恢复和给出一个完整的工作解决方案,在一行。 如果您想要重命名文件,请注意,您应该包括一种方法来提供到mkdir的干净dir路径。$fdst可以是file或dir。 下一段代码在任何情况下都可以工作。

fsrc=/tmp/myfile.unk
fdst=/tmp/dir1/dir2/dir3/myfile.txt
mkdir -p $(dirname ${fdst}) && cp -p ${fsrc} ${fdst}

或者特定于bash

fsrc=/tmp/myfile.unk
fdst=/tmp/dir1/dir2/dir3/myfile.txt
mkdir -p ${fdst%/*} && cp -p ${fsrc} ${fdst}

其他回答

如果以下两个条件都成立:

您使用的是GNU版本的cp(而不是Mac版本),并且 您正在从一些现有的目录结构进行复制,您只需要重新创建它

然后你可以用cp的——parents标志来做。从信息页面(可以在http://www.gnu.org/software/coreutils/manual/html_node/cp-invocation.html#cp-invocation或info cp或man cp查看):

——父母 通过追加到目标文件来形成每个目标文件的名称 目录中包含斜杠和源文件的指定名称。的 给' cp'的最后一个参数必须是现有的 目录中。例如,命令: Cp——parents a/b/c existing_dir 复制文件' a/b/c'到' existing_dir/a/b/c',创建any 缺少中间目录。

例子:

/tmp $ mkdir foo
/tmp $ mkdir foo/foo
/tmp $ touch foo/foo/foo.txt
/tmp $ mkdir bar
/tmp $ cp --parents foo/foo/foo.txt bar
/tmp $ ls bar/foo/foo
foo.txt
mkdir -p "$d" && cp file "$d"

(cp没有这样的选项)。

比如说你在做

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

希望有帮助!

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

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

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

mkcp test a/b/c/d

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

简单地没有创建脚本和简单的命令…

mkdir -p /destination-folder/ && cp file-name /destination-folder/