Rsync

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

  • July 1, 2010

我正在嘗試將目錄/文件結構從一個目錄遞歸複製到另一個目錄,只保留 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/ \; 

將重新創建 ./ 的目錄樹,在其中找到 html 文件,並在 /target/base/directory 下建構相同的目錄樹

Rsync 可能會混淆像這樣的選擇性副本。我使用以下內容來完成您要求的任務:

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

基本上你需要在搜尋中包含所有目錄,然後將所有*.html文件添加到列表中,排除所有其他文件。

--prune-empty-dirs選項使用起來很方便,因為它排除了任何沒有*.html文件的目錄。

引用自:https://serverfault.com/questions/156761