如何在 Linux 中使用 cp 复制目录但忽略某个子目录

如何在 Linux 中使用 cp 复制目录但忽略某个子目录

由于硬盘问题,我尝试将分区从一个硬盘移到另一个硬盘。我正在关注http://www.ibm.com/developerworks/library/l-partplan.html文章中介绍了如何做到这一点。在复制部分,我想忽略一个特定的子目录。我该如何实现这一点,同时记住在复制时我必须保留我的所有者组和时间戳。如果我不忽略特定的子目录,则需要复制大约 700 GB 的数据。

答案1

rsync -ax --exclude [relative path to directory to exclude] /path/from /path/to

您可能也想(或不想)使用--del。查看手册页。

答案2

通常我使用cpio如下方法,

cd source_dir; find . -depth | cpio -pdmv dest_dir

由于这是一个管道,您可以在中间放置一个“减法滤波器”。

cd sourcedir; find . -depth | grep -v exclude_dir | cpio -pdmv dest_dir

或者你可以把它分成几个步骤,

cd source_dir; find . -depth > files.lst
gedit files.lst  # (take out the offending directory and files and save back to files.lst)
cpio -pdmv dest_dir < files.lst

当然,我会首先在较小的物体上进行测试,但你明白我的意思了。

答案3

您可以编写一个简单的 bash 脚本,使用循环来忽略您不想复制的某些路径并复制其余路径。另一个解决方案可能是使用正则表达式。您可以在此处阅读有关 bash 脚本的内容 ->http://tldp.org/LDP/Bash-Beginners-Guide/html/Bash-Beginners-Guide.html 正则表达式教程在这里 ->http://www.regular-expressions.info/

答案4

相当丑陋的解决方案,但是...为什么不以非递归方式 cp 目录中的所有内容,然后以递归方式复制各个目录?

相关内容