How to have the cp command create any necessary folders for copying a file to a destination
本问题已经有最佳答案,请猛点这里访问。
当使用
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 |
为了进一步说明基督教徒的答案,唯一可靠的方法是将
1 | mkdir -p /foo/bar && cp myfile"$_" |
另外,当您只需要在现有的层次结构中创建一个目录时,
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/ |
其中
我认为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选项,但它只是一个草案,我知道它可以,你会在很多方面改进它。希望它能帮助你
还可以使用命令
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 |
一旦释放空间,