2012-08-29 110 views
1

我希望rsync在包含某種文件類型的情況下跳過整個目錄。使用rsync排除包含特定文件類型的目錄

我知道如何排除特定類型的文件。但是因爲我不知道我想排除的所有文件類型,只是如果一個類型存在,整個目錄應該被排除,這對我來說沒有多大幫助。

回答

2

我會去這種方式:

  • 構建一個文件中列出的所有文件: find . > allfiles

  • 獲取不需要rsynced的目錄列表。既然你沒有指定什麼是你繞圈,讓我們假定它是一個文件後綴像fop

    find . -path '*fop' | xargs -r -n1 dirname

會給你「禁止目錄」的名單。在這裏你必須適應你的情況。

  • 然後grep -v從整個文件列表中的禁止目錄,建立一個過濾的文件列表

  • 然後--files-from=開關使用過濾的文件列表rsync的

+0

應該可以得到沒有創建所有文件的列表並過濾它的結果相同;只需將禁止的目錄作爲列表(使用'--exclude')或文件(使用'--exclude-from')傳遞給rsync即可。 – Mark

0

好吧,這有點醜陋,但是你總是可以反引號並運行一個查找命令,其中包含一些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 
相關問題