rsync 和 include/exclude。这有多难?

rsync 和 include/exclude。这有多难?

我正在尝试将目录/文件结构从一个目录递归复制到另一个目录,仅保留 html 文件。这应该是包含/排除的简单情况,不是吗?

我只想先把文件打印出来。等我打印好之后,我再复印。

rsync -a --list-only -v SOURCEDIR --exclude='.*' --include='**/*.html' 

把所有文件都给我。

rsync -a --list-only -v SOURCEDIR --include='**/*.html' --exclude='*' 

rsync -a --list-only -v SOURCEDIR --include='*.html' --exclude='*' 
rsync -a --list-only -v SOURCEDIR --include=*.html --exclude=*

不要给我任何文件。

rsync -a --list-only -v SOURCEDIR --include='*.html' --exclude='*.*'

看起来它给了我整个目录结构和仅 html 文件。但我不想要空目录。

帮助!

在 Mac OS 10.6 上

答案1

您是否考虑过使用 find 来完成您的艰苦工作?

类似于

find ./ -name "*.html" -exec rsync -R {} /target/base/directory/ \; 

将重新创建 ./ 目录树,在其中找到 html 文件,并在 /target/base/directory 下构建相同的文件

答案2

Rsync 可能会对此类选择性复制造成混淆。我使用以下命令执行您要求的任务:

rsync -avP \
--filter='+ */' \
--filter='+ **/*.html' \
--filter='- *' \
--prune-empty-dirs \
--delete \
/source/ \
/dest/

基本上,您需要在搜索中包含所有目录,然后将所有*.html文件添加到列表中,排除所有其他文件。

--prune-empty-dirs选项使用起来很方便,因为它可以排除任何没有文件的目录*.html

答案3

我不能 100% 肯定这是最好的[0]方法,但你可以在上次尝试的基础上稍作调整,让它发挥作用。只需添加修剪目录选项 (--prune or -m)。

rsync -am --list-only -v SOURCEDIR --include='*.html' --exclude='*.*'

[0] 我说的“最佳”是指最简洁、最高效的方式。似乎应该有一种更优雅的方式来表达这一点,但我不知道那是什么。

相关内容