524

将文件复制cp到可能存在或不存在的文件夹时,如果需要,如何cp创建文件夹?这是我尝试过的:

[root@file nutch-0.9]# cp -f urls-resume /nosuchdirectory/hi.txt
cp: cannot create regular file `/nosuchdirectory/hi.txt': No such file or directory
4

7 回答 7

320

为了扩展克里斯蒂安的答案,唯一可靠的方法是结合mkdircp

mkdir -p /foo/bar && cp myfile "$_"

顺便说一句,当您只需要在现有层次结构中创建单个目录时,rsync可以在一个操作中完成。事实上,我非常喜欢rsync一个更通用的cp替代品:

rsync -a myfile /foo/bar/ # works if /foo exists but /foo/bar doesn't.  bar is created.
于 2012-12-29T19:24:50.433 回答
123

我不知道你可以用cp做到这一点。

你可以用 mkdir ..

mkdir -p /var/path/to/your/dir

编辑 请参阅 lhunath 的合并 cp 的答案

于 2009-06-04T00:15:52.107 回答
29
 mkdir -p `dirname /nosuchdirectory/hi.txt` && cp -r urls-resume /nosuchdirectory/hi.txt
于 2014-02-09T15:22:16.207 回答
28

也可以使用命令find

find ./ -depth -print | cpio -pvd newdirpathname
于 2012-11-14T18:34:42.433 回答
21

没有这样的选择。您可以做的是在复制文件之前运行mkdir -p

我制作了一个非常酷的脚本,您可以使用它来将文件复制到不存在的位置

#!/bin/bash
if [ ! -d "$2" ]; then
    mkdir -p "$2"
fi
cp -R "$1" "$2"

现在只需保存它,授予它权限并使用它运行它

./cp-improved SOURCE DEST

我放了 -R 选项,但它只是一个草稿,我知道它可以,你会在很多方面改进它。希望对你有帮助

于 2009-06-04T00:16:46.533 回答
9

rsync 是工作!

#file:
rsync -aqz _vimrc ~/.vimrc

#directory:
rsync -aqz _vim/ ~/.vim
于 2013-05-23T05:59:19.037 回答
-8
cp -Rvn /source/path/* /destination/path/
cp: /destination/path/any.zip: No such file or directory

如果路径中有源文件,它将在目标中不创建现有路径。这不会创建空目录。

刚才我看到 xxxxxxxx:没有这样的文件或目录,因为我的可用空间用完了。没有错误信息。

同上:

ditto -V /source/path/* /destination/path
ditto: /destination/path/any.zip: No space left on device

一旦释放空间cp -Rvn /source/path/* /destination/path/按预期工作

于 2013-03-29T16:07:08.800 回答