我希望rsync在包含某種文件類型的情況下跳過整個目錄。使用rsync排除包含特定文件類型的目錄
我知道如何排除特定類型的文件。但是因爲我不知道我想排除的所有文件類型,只是如果一個類型存在,整個目錄應該被排除,這對我來說沒有多大幫助。
我希望rsync在包含某種文件類型的情況下跳過整個目錄。使用rsync排除包含特定文件類型的目錄
我知道如何排除特定類型的文件。但是因爲我不知道我想排除的所有文件類型,只是如果一個類型存在,整個目錄應該被排除,這對我來說沒有多大幫助。
我會去這種方式:
構建一個文件中列出的所有文件: find . > allfiles
獲取不需要rsynced的目錄列表。既然你沒有指定什麼是你繞圈,讓我們假定它是一個文件後綴像fop
find . -path '*fop' | xargs -r -n1 dirname
會給你「禁止目錄」的名單。在這裏你必須適應你的情況。
然後grep -v
從整個文件列表中的禁止目錄,建立一個過濾的文件列表
然後--files-from=
開關使用過濾的文件列表rsync的
好吧,這有點醜陋,但是你總是可以反引號並運行一個查找命令,其中包含一些sed工作。例如,如果我想忽略與擴展.dist
文件中的所有目錄,然後我可以這樣做:
rsync -vvaR `find /etc -name '*.dist' | sed -e 's:/[^/]*$:/:' | sort | uniq | sed -e 's:^/:--exclude /:'` /etc rsync://hostname.com/
我得到一些輸出,看起來像:
[client] add_rule(- /etc/config-archive/etc/)
[client] add_rule(- /etc/config-archive/etc/bash/)
[client] add_rule(- /etc/config-archive/etc/bind/)
[client] add_rule(- /etc/config-archive/etc/conf.d/)
[client] add_rule(- /etc/config-archive/etc/cron.daily/)
[client] add_rule(- /etc/config-archive/etc/eclean/)
[client] add_rule(- /etc/config-archive/etc/init.d/)
[client] add_rule(- /etc/config-archive/etc/logrotate.d/)
[client] add_rule(- /etc/config-archive/etc/modprobe.d/)
[client] add_rule(- /etc/config-archive/etc/mysql/)
[client] add_rule(- /etc/config-archive/etc/pam.d/)
[client] add_rule(- /etc/config-archive/etc/portage/bin/)
[client] add_rule(- /etc/config-archive/etc/portage/postsync.d/)
[client] add_rule(- /etc/config-archive/etc/portage/savedconfig/sys-apps/)
[client] add_rule(- /etc/config-archive/etc/profile.d/)
[client] add_rule(- /etc/config-archive/etc/security/)
[client] add_rule(- /etc/config-archive/etc/ssh/)
[client] add_rule(- /etc/config-archive/etc/ssl/)
[client] add_rule(- /etc/config-archive/etc/ssl/certs/)
[client] add_rule(- /etc/config-archive/etc/ssl/misc/)
[client] add_rule(- /etc/config-archive/etc/ssmtp/)
[client] add_rule(- /etc/config-archive/etc/syslog-ng/)
[client] add_rule(- /etc/config-archive/etc/udev/)
[client] add_rule(- /etc/config-archive/etc/udev/rules.d/)
[client] add_rule(- /etc/config-archive/etc/vim/)
opening tcp connection to hostname.com port 873
應該可以得到沒有創建所有文件的列表並過濾它的結果相同;只需將禁止的目錄作爲列表(使用'--exclude')或文件(使用'--exclude-from')傳遞給rsync即可。 – Mark