如何从远程服务器同步多种类型的所有文件?例如,我想从服务器上的文件夹中同步所有 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/*.pdf
:REMOTE_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