如何在不复制目录内容的情况下复制文件和目录?

如何在不复制目录内容的情况下复制文件和目录?

我有一个find命令选择一些目录和文件复制到不同的位置(使用--parents)。我想要的是命令输出的目录find被复制而没有内容(但它们应该具有相同的所有权和模式)。

我可以仅使用或限制find文件,但随后将根据需要使用默认所有权和模式创建目录。如果我使用选项,则目录将以正确的所有权和模式复制,而且还会复制其所有文件。基本上,我希望列表中的目录仅复制目录元数据而不复制其内容。-type f! -type d-rcp

如何实现这一目标?

答案1

我认为最简单的工具是pax,因为它有一个-d选项,表示在给定目录时不递归。

因此,要仅复制目录,请分步进行,以便您可以验证目录是否已复制,不要复制文件,您也可以这样做

find somewhere -type d | pax -wd  > archive.tar
tar vtf archive.tar
( cd somewhere_else && tar xpf - ) < archive.tar

一旦您满意,您可以删除存档内容的中间打印(tar vxf archive.tar)并用管道替换中间 archive.tar 文件。

答案2

如果你有 GNU find,也许类似

find path/to/dir -type d -printf '%P\0' | 
  rsync -0av --files-from=- path/to/dir/ path/to/newdir/

将执行您想要的操作(通过替换-0av为进行测试-0avn)。

根据您的搜索条件,您也许可以rsync单独使用合适的过滤器,例如复制整个目录结构

rsync -avn -f'+ */' -f'- *' path/to/dir/ path/to/newdir/

参见示例Linux:rsync 仅复制目录结构树

相关内容