我有一个find
命令选择一些目录和文件复制到不同的位置(使用--parents
)。我想要的是命令输出的目录find
被复制而没有内容(但它们应该具有相同的所有权和模式)。
我可以仅使用或限制find
文件,但随后将根据需要使用默认所有权和模式创建目录。如果我使用选项,则目录将以正确的所有权和模式复制,而且还会复制其所有文件。基本上,我希望列表中的目录仅复制目录元数据而不复制其内容。-type f
! -type d
-r
cp
如何实现这一目标?
答案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/