rsync 和包含/排除。它能有多难?

Joe*_*Joe 7 rsync copy

我试图递归地将目录/文件结构从一个目录复制到另一个目录,只保留 html 文件。应该是包含/排除的简单案例,不是吗?

我只想先打印出文件。当我做对了,我会复制它们。

rsync -a --list-only -v SOURCEDIR --exclude='.*' --include='**/*.html' 
Run Code Online (Sandbox Code Playgroud)

给我所有的文件。

rsync -a --list-only -v SOURCEDIR --include='**/*.html' --exclude='*' 
Run Code Online (Sandbox Code Playgroud)

rsync -a --list-only -v SOURCEDIR --include='*.html' --exclude='*' 
rsync -a --list-only -v SOURCEDIR --include=*.html --exclude=*
Run Code Online (Sandbox Code Playgroud)

不给我文件。

rsync -a --list-only -v SOURCEDIR --include='*.html' --exclude='*.*'
Run Code Online (Sandbox Code Playgroud)

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

帮助!

在 Mac OS 10.6 上

Sha*_*ers 11

Rsync 可能会混淆像这样的选择性副本。我使用以下内容来完成您要求的任务:

rsync -avP \
--filter='+ */' \
--filter='+ **/*.html' \
--filter='- *' \
--prune-empty-dirs \
--delete \
/source/ \
/dest/
Run Code Online (Sandbox Code Playgroud)

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

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


Mat*_*ons 3

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

类似的东西

find ./ -name "*.html" -exec rsync -R {} /target/base/directory/ \; 
Run Code Online (Sandbox Code Playgroud)

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