带有多个通配符的 Rsync

带有多个通配符的 Rsync

如何从远程服务器同步多种类型的所有文件?例如,我想从服务器上的文件夹中同步所有 pdf 和 png。

这会引发语法错误:rsync REMOTE_SERVER:REMOTE_PATH/{*.pdf, *.png} LOCAL_PATH

我也尝试过: rsync --include='*.png' --include='*.pdf' --exclude='*' REMOTE_SERVER:REMOTE_PATH/ LOCAL_PATH它不同步任何内容(如果exclude在前面则相同)

我目前正在求助, rsync REMOTE_SERVER:REMOTE_PATH/*.pdf LOCAL_PATH; rsync REMOTE_SERVER:REMOTE_PATH/*.png LOCAL_PATH但想用一个命令来完成此操作。

答案1

尝试:

rsync -av --include='*.pdf' --include='*.png' --exclude='*' REMOTE_SERVER:REMOTE_PATH/ LOCAL_PATH

如果您使用嵌套目录结构,您可以使用:

rsync -av --include='*/' --include='*.pdf' --include='*.png' --exclude='*' REMOTE_SERVER:REMOTE_PATH/ LOCAL_PATH

我使用了 exlude 和 include 来包含相关文件格式并排除所有其他格式

希望有帮助

答案2

让我们看看发生了什么。我假设您正在使用bash或其他一些能够理解大括号扩展的 shell

rsync REMOTE_SERVER:REMOTE_PATH/{*.pdf, *.png} LOCAL_PATH

如果您以此为前缀,echo您将看到大括号未展开:

echo rsync REMOTE_SERVER:REMOTE_PATH/{*.pdf, *.png} LOCAL_PATH
rsync REMOTE_SERVER:REMOTE_PATH/{*.pdf, *.png} LOCAL_PATH

rsync看到这三个参数:REMOTE_SERVER:REMOTE_PATH/{*.pdf,*.png}LOCAL_PATH

最初的问题是大括号内有一个空间,破坏了它们的结构。这是更正确的:

echo rsync REMOTE_SERVER:REMOTE_PATH/{*.pdf,*.png} LOCAL_PATH

现在rsync看到这三个参数REMOTE_SERVER:REMOTE_PATH/*.pdfREMOTE_SERVER:REMOTE_PATH/*.png LOCAL_PATH

这会将所有 PDF 和 PNG 文件从指定的远程目录复制到本地目标。但是,它并未经过优化,因为您忽略了rsync包含文件修改时间(--times、 或-t)。

rsync --times REMOTE_SERVER:REMOTE_PATH/{*.pdf,*.png} LOCAL_PATH

如果您想从根目录树中复制所有 PDF 和 PNG 文件,REMOTE_PATH您需要完全不同的方法:

rsync --recursive --times --include '*.pdf' --include '*.png' --include '**/' --exclude '*' --prune‐empty‐dirs REMOTE_SERVER:REMOTE_PATH LOCAL_PATH

相关内容