我需要将目录中的所有文件复制到备份硬盘上,同时保留目录结构。这样可行吗:
find . -name '*.*' -exec cp --parents \{\} /target \;
然后我想将备份硬盘复制到新计算机,但如果该文件已存在于目标位置我不想复制它,我只是想跳过它。
做这个的最好方式是什么?
答案1
不需要 afind
和cp
组合。我会用它rsync
来完成这样的任务。
要复制“所有内容”并保留权限和所有权(并跳过不需要复制的内容),请使用“试运行”等
sudo rsync -Havn sourcedir/ targetdir/
当事情看起来不错时,删除n
并进行真正的复制,
sudo rsync -Hav sourcedir/ targetdir/
斜杠结尾sourcedir/
很重要,这在 中进行了描述man rsync
。
如果没有硬链接,可以跳过H
,搜索过程会更快。
如果权限和所有权没有问题,则可以运行rsync
不带sudo
.
答案2
只需检查 cp 的手册页,但 -n 标志应该可以解决问题。
find . -name '.' -exec cp -n --parents {} /target ;
-n 不要覆盖现有文件。
但请检查您的系统并进行测试。
在 cp 上,我可能会考虑添加 -p 标志来保留修改时间和访问时间,但它将保留您可能不想保留的许多其他文件系统信息,例如权限、ACL、所有者...
我会写 '{}' 而不是只写 {} 并用 ; 关闭指令
find . -name '*.*' -exec cp -n --parents '{}' /target \;