You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Linux下如何查找与foo内容相同的bar多级目录文件?

对比文件内容找出与foo相同的文件(Linux)

没问题,你猜的没错,用find配合文件对比工具就能完美解决这个需求,我给你两种实用的方案,按需选择:

方案一:用cmp直接对比内容(高效简洁)

cmp命令可以直接对比两个文件的内容,-s参数让它静默运行(不输出对比结果,只返回状态码)。结合find的特性,当对比成功时返回文件名:

find bar -type f -exec cmp -s foo {} \; -print

命令解释:

  • -type f:只遍历bar下的所有文件,跳过目录,避免无意义的对比
  • -exec cmp -s foo {} \;:对每个找到的文件执行cmp对比,和foo内容完全一致时返回0(成功)
  • -print:只有前面的-exec命令执行成功时,才打印当前文件的路径

这个方案的优势是无需生成中间校验值,对大文件更友好,速度更快,还能自动处理带空格的文件名。

方案二:用md5sum生成校验值对比(适合需要留存校验记录的场景)

如果需要先记录foo的内容校验值,再批量对比,可以用md5sum:

# 先获取foo的MD5校验值(避免文件名干扰,直接读取文件内容计算)
FOO_MD5=$(md5sum < foo)

# 遍历bar下所有文件,对比MD5值
find bar -type f -exec sh -c '
  FILE_MD5=$(md5sum < "$1")
  if [ "$FILE_MD5" = "$FOO_MD5" ]; then
    echo "$1"
  fi
' _ {} \;

命令解释:

  • md5sum < foo:直接读取foo的内容计算MD5,不会把文件名算进校验值里(如果文件名有特殊字符也不影响)
  • find的-exec sh -c '...' _ {} \;:把每个找到的文件作为参数传给shell脚本,在脚本里单独计算MD5并对比
  • 双引号包裹"$1"和"$FILE_MD5":确保带空格的文件名能被正确处理

两种方案都能帮你找出bar目录下所有和foo内容完全一致的文件,推荐优先用方案一,更高效省心~

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 06:13:38