将 rsync 排除模式转换为明确的文件列表

将 rsync 排除模式转换为明确的文件列表

我试图找出是否有方法可以将rsync我为了进行合理备份而维护的一长串排除模式转换为文件和目录名称的显式列表。

该应用程序是我尝试为不同的应用程序使用相同的列表(每当我通过添加或删除模式来更新它时)(mksquashfs)。这两种工具都允许将每行一个条目的显式文件列表指定为排除列表,但模式的语法在细节上有所不同。

您可以假设要转换的列表由 . 允许的所有类型的模式组成,可能包括通配符rsync

可以想到两种方法:

  1. 找出rsync钩子下的用途(似乎既不是简单的 shell globbing 也不是find
  2. 用于rsync通过进行带有详细输出的虚拟传输来生成列表--dry-run(这里我不知道如何让它打印排除文件的名称)

答案1

像这样的东西: where"${other_opts[@]}"指示你的正常 rsync 参数。

rsync --dry-run --debug=FILTER  "${other_opts[@]}" /proc/$$/no-such-dir/

应该打印出所有排除的文件。

[sender] hiding file .bash_history-27611.tmp because of pattern *.tmp
[sender] hiding file .bash_history-21217.tmp because of pattern *.tmp
[sender] hiding file .bash_history-29735.tmp because of pattern *.tmp
[sender] hiding file .bash_history-20437.tmp because of pattern *.tmp

你可以使用 sed 将其切碎。

sed '/^\[sender\] hiding file .* because of / {
  s/^\[sender\] hiding file \(.*\) because of .*/\1/
  p
  }
d '

但如果您遇到包含控制字符的文件名,这可能会中断。

相关内容