You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

Shell中无需正则表达式,如何忽略或排除以~结尾的备份文件?

忽略备份文件计算MD5校验值的通用Shell方法

当然有!Shell里有几种通用的方法可以帮你忽略各类备份文件,适配不同的备份命名场景,我来给你拆解几个实用方案:

方案1:直接用find排除匹配的备份文件

最常用的方式是通过find! -name参数,直接过滤掉符合备份命名规则的文件。比如常见的备份文件类型包括:以~结尾的编辑器临时备份(如Vim生成的file.txt~)、.bak/.orig后缀的备份文件。

执行命令:

find /path/to/ -type f \( ! -name "*~" ! -name "*.bak" ! -name "*.orig" \) -print0 | xargs -0 md5sum
  • 这里的\( ... \)用来把多个排除条件组合成一个整体,确保逻辑正确;
  • 你可以根据自己实际的备份文件命名,添加更多! -name "模式"的条件,比如要排除.tmp后缀的文件,就加! -name "*.tmp"

方案2:跳过整个备份目录

如果你的备份文件都集中在某个特定目录(比如backup/或者.backup/),可以用find-prune参数直接跳过整个目录,避免不必要的遍历:

find /path/to/ -type d -name "backup" -prune -o -type f -print0 | xargs -0 md5sum
  • -prune会告诉find跳过匹配到的目录,不深入其中查找文件;
  • 如果有多个备份目录,同样可以扩展条件,比如-type d \( -name "backup" -o -name ".tmp_dir" \) -prune

方案3:批量读取排除规则(适合多模式场景)

如果你有大量要排除的文件模式,逐个写在命令里太麻烦,可以把规则写到一个文件中,结合grep来过滤:

  1. 先创建一个排除规则文件exclude_patterns.txt,每行写一个要排除的模式:
*~
*.bak
*.orig
*.tmp
  1. 然后执行命令:
find /path/to/ -type f -print0 | grep -z -v -F -f exclude_patterns.txt | xargs -0 md5sum
  • -z参数对应find-print0,用null字符作为分隔符,避免文件名含空格时出问题;
  • -v表示反向匹配(即保留不匹配规则的文件);
  • -F把规则当作固定字符串而非正则表达式,避免转义麻烦;
  • -f指定读取规则的文件。

这些方法都是Shell环境下通用的,不管你用Bash、Zsh还是其他主流Shell都能生效,你可以根据自己的备份文件情况选择最合适的方案~

内容的提问来源于stack exchange,提问作者Avinash Jeeva

火山引擎 最新活动