将文件复制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
为了扩展克里斯蒂安的答案,唯一可靠的方法是结合mkdir
和cp
:
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.
mkdir -p `dirname /nosuchdirectory/hi.txt` && cp -r urls-resume /nosuchdirectory/hi.txt
也可以使用命令find
:
find ./ -depth -print | cpio -pvd newdirpathname
没有这样的选择。您可以做的是在复制文件之前运行mkdir -p
我制作了一个非常酷的脚本,您可以使用它来将文件复制到不存在的位置
#!/bin/bash
if [ ! -d "$2" ]; then
mkdir -p "$2"
fi
cp -R "$1" "$2"
现在只需保存它,授予它权限并使用它运行它
./cp-improved SOURCE DEST
我放了 -R 选项,但它只是一个草稿,我知道它可以,你会在很多方面改进它。希望对你有帮助
rsync 是工作!
#file:
rsync -aqz _vimrc ~/.vimrc
#directory:
rsync -aqz _vim/ ~/.vim
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/
按预期工作