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

例子:

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

当前回答

从源复制到不存在的路径

mkdir –p /destination && cp –r /source/ $_

注意:该命令复制所有文件

Cp -r用于复制所有文件夹及其内容

$_ work作为最后一个命令中创建的目标

其他回答

mkdir -p "$d" && cp file "$d"

(cp没有这样的选项)。

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

这么老的问题,但也许我可以提出另一种解决方案。

您可以使用安装程序复制您的文件,并“在飞行中”创建目标路径。

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

不过,还是有一些方面需要考虑的:

您还需要指定目标文件名,而不仅仅是目标路径 目标文件将是可执行的(至少,从我的测试来看)

您可以通过添加-m选项来设置目标文件的权限来轻松修改#2(例如:-m 664将创建具有权限rw-rw-r——的目标文件,就像使用touch创建一个新文件一样)。


这里有一个无耻的链接,链接到我受到启发的答案=)

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

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

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

mkcp test a/b/c/d

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

Cp有多种用法:

$ cp --help
Usage: cp [OPTION]... [-T] SOURCE DEST
  or:  cp [OPTION]... SOURCE... DIRECTORY
  or:  cp [OPTION]... -t DIRECTORY SOURCE...
Copy SOURCE to DEST, or multiple SOURCE(s) to DIRECTORY.

@AndyRoss的答案适用于

cp SOURCE DEST

样式,但是如果您使用

cp SOURCE... DIRECTORY/

cp的风格。

我认为“DEST”在这种用法中没有后面的斜杠是不明确的(即目标目录还不存在),这可能是为什么cp从未为此添加选项的原因。

下面是这个函数的版本,在dest目录上强制加一个斜杠:

cp-p() {
  last=${@: -1}

  if [[ $# -ge 2 && "$last" == */ ]] ; then
    # cp SOURCE... DEST/
    mkdir -p "$last" && cp "$@"
  else
    echo "cp-p: (copy, creating parent dirs)"
    echo "cp-p: Usage: cp-p SOURCE... DEST/"
  fi
}