仅同步*.php文件的rsync

3
我该如何使用rsync仅镜像*.php文件?这会给我一堆空目录,而我不需要它们。
rsync -v -aze 'ssh ' \
--numeric-ids \
--delete \
--include '*/' \
--exclude '*' \
--include '*.php' \
user@site.com:/home/www/domain.com \
/Volumes/Servers/

我的回答没有解决你的问题吗? - Joao Figueiredo
1
诀窍是在参数列表中添加 --prune-empty-dirs \ - Poe
1个回答

6
罪魁祸首是以下内容:
--include '*/'  

当使用通配符并在其后加上斜杠时,你告诉rsync传输所有以“/”结尾的文件(也就是所有目录)。因此,

rsync -v -aze 'ssh ' \
--numeric-ids \
--delete \
--exclude '*' \
--include '*.php' \
user@site.com:/home/www/domain.com \
/Volumes/Servers/

如果您使用它来递归查找所有.php文件,那么您必须使用**通配符。也就是说, --include '**/*.php'

另一种方法(http://www.commandlinefu.com/commands/view/1481/rsync-find)是预先查找目标文件,然后使用rsync。

find source -name "*.php" -print0 | rsync -av --files-from=- --from0 ./ ./destination/

rsync命令排除了所有文件,因此没有传输任何内容。我想我所做的是使用我尝试过的原始块,并在完成后运行一个查找命令来删除所有空文件夹。 - Poe
7
是的,总括一切的“排除”应该放在“包括”之后。 - G-Wiz
@G-Wiz嗯,我希望答案确实是这样说的 - 尽管我无论如何都无法让它工作。 - Michael

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接