使用rsync排除包含特定文件类型的目录

时间:2012-08-29 07:58:36

标签: linux rsync

如果rsync包含某种文件类型,我希望rsync跳过整个目录。

我知道如何排除某种类型的文件。但是因为我不知道我想要排除的所有类型的文件,只是如果存在一个类型,那么应该排除整个目录,这对我没有多大帮助。

2 个答案:

答案 0 :(得分:2)

我会这样:

  • 构建一个列出所有文件的文件: find . > allfiles

  • 获取不是rsynced的目录列表。由于您没有指定什么是您的标准,我们假设它是一个文件后缀,如fop

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

会给你“禁止目录”的列表。在这里你必须适应你的情况。

  • 然后grep -v整个文件列表中的禁止目录,构建过滤文件列表

  • 然后rsync与--files-from=切换使用过滤的文件列表

答案 1 :(得分:0)

嗯,这有点难看,但是你总是可以使用反引号并运行一个带有sed工作的find命令。例如,如果我想忽略具有扩展名.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