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

我试图recursion复制目录/文件结构从一个目录到另一个,只保留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上

你有没有考虑过使用find来做你的辛勤工作?

东西沿线

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

将重新创build./的目录树,在其中findhtml文件,并在/ target / base /目录下build立相同的目录树

Rsync可能会混淆像这样的select性副本。 我使用以下来完成你所要求的任务:

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

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

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

我不是100%肯定这是最好的方法,但是你可以对你最后一次尝试添加一个微小的调整,并使其工作。 只需添加修剪目录选项( --prune or -m )。

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

[0]“最好的”,我的意思是最干净和最有效的方法。 似乎应该有更优雅的expression方式,但我不知道它是什么。