【问题标题】:Exclude directories that contain a certain file type with rsync使用 rsync 排除包含特定文件类型的目录
【发布时间】:2012-08-29 07:58:35
【问题描述】:

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

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

【问题讨论】:

    标签: linux rsync


    【解决方案1】:

    我会走这条路:

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

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

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

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

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

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

    【讨论】:

    • 应该可以在不创建所有文件列表并过滤它的情况下获得相同的结果;只需将禁止的目录作为列表(--exclude)或文件(--exclude-from)传递给 rsync。
    【解决方案2】:

    嗯,这有点难看,但是您总是可以添加反引号并运行带有一些 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
    

    【讨论】:

      猜你喜欢
      • 2020-03-22
      • 1970-01-01
      • 2012-04-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-04-02
      • 2023-01-04
      相关资源
      最近更新 更多