我需要一个命令(可能是cp的一个选项)来创建目标目录(如果目标目录不存在)。
例子:
cp -? file /path/to/copy/file/to/is/very/deep/there
我需要一个命令(可能是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 /path/to/copy/file/to/is/very/deep/there/file
不过,还是有一些方面需要考虑的:
您还需要指定目标文件名,而不仅仅是目标路径 目标文件将是可执行的(至少,从我的测试来看)
您可以通过添加-m选项来设置目标文件的权限来轻松修改#2(例如:-m 664将创建具有权限rw-rw-r——的目标文件,就像使用touch创建一个新文件一样)。
这里有一个无耻的链接,链接到我受到启发的答案=)
比如说你在做
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
希望有帮助!
正如上面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中工作得很好,将两个步骤(创建目录和复制文件)合并为一个步骤。
只需在你的.bashrc中添加以下代码,如果需要可以调整。适用于Ubuntu。
mkcp() {
test -d "$2" || mkdir -p "$2"
cp -r "$1" "$2"
}
如 如果您想将“test”文件复制到目标目录“d” 使用,
mkcp test a/b/c/d
MKCP将首先检查目标目录是否存在,如果不存在则创建并复制源文件/目录。
install -D file -m 644 -t /path/to/copy/file/to/is/very/deep/there