关于linux:如何让cp命令创建用于将文件复制到目标的任何必要文件夹

How to have the cp command create any necessary folders for copying a file to a destination

本问题已经有最佳答案,请猛点这里访问。

当使用cp将文件复制到可能存在或可能不存在的文件夹时,如果需要,如何让cp创建文件夹?以下是我的尝试:

1
2
[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


为了进一步说明基督教徒的答案,唯一可靠的方法是将mkdircp结合起来:

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

另外,当您只需要在现有的层次结构中创建一个目录时,rsync可以在一个操作中完成。我是rsync的忠实粉丝,事实上,我是一个多才多艺的cp替代品:

1
rsync -a myfile /foo/bar/ # works if /foo exists but /foo/bar doesn't.  bar is created.


我不知道你能用CP做到这一点。

你可以用mkdir来完成。

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

编辑请参阅lhunath关于合并CP的回答。


对于那些在MacOSX上的用户,解决这个问题的最简单方法可能是使用DITTO(不过,只有在Mac、Afaik上)。它将创建目标中缺少的目录结构。

例如,我这样做了

1
ditto 6.3.2/6.3.2/macosx/bin/mybinary ~/work/binaries/macosx/6.3.2/

其中~/work在我运行命令之前没有包含二进制文件目录。

我认为rsync的工作原理应该类似,但它似乎只适用于一个丢失目录的级别。也就是说,

1
rsync 6.3.3/6.3.3/macosx/bin/mybinary ~/work/binaries/macosx/6.3.3/

工作,因为~/work/binaries/macosx存在,但不存在~/work/binaries/macosx/6.3.2/


1
 mkdir -p `dirname /nosuchdirectory/hi.txt` && cp -r urls-resume /nosuchdirectory/hi.txt

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

我做了一个非常酷的脚本,你可以用它在不存在的地方复制文件。

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

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

1
./cp-improved SOURCE DEST

我提出-r选项,但它只是一个草案,我知道它可以,你会在很多方面改进它。希望它能帮助你


还可以使用命令find

1
find ./ -depth -print | cpio -pvd newdirpathname


RSyc就是工作!

1
2
3
4
5
#file:
rsync -aqz _vimrc ~/.vimrc

#directory:
rsync -aqz _vim/ ~/.vim

1
2
cp -Rvn /source/path/* /destination/path/
cp: /destination/path/any.zip: No such file or directory

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

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

同上:

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

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