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


9

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

Answers:



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

当然,我会先在较小的物体上进行测试,但是您知道了。



0

您可以暂时将(mv)大子目录移动到其他位置,进行复制,然后还原该子目录吗?我看不到cp这样做的直接选择。


我也检查了man cp,没有办法忽略使用cp。我在该子目录和mv中有550 GB的数据,这可能需要几个小时。
罗伊

我认为mv是一种成本相对较低的操作-更新对数据的引用,而不是在磁盘上进行物理移动。至少,我一直发现Windows中的迁移比复制更快,Linux文件系统的工作方式完全不同。

mv到相同的硬盘速度很快。但是,当我在硬键上执行MV时,我认为它与CP花费的时间相同。
罗伊

我的意思是将其移动到同一硬盘上的某个位置以使其摆脱干扰,然后将其余部分复制到远程磁盘,然后将大文件移回。除非您要从/复制整个磁盘。
Ash Ash,2010年

0

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


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.