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

Linux下递归对比目录时如何精准排除指定文件而非同名目录

Linux下递归对比目录时如何精准排除指定文件而非同名目录

嗨,这个需求其实用diff本身就能轻松搞定,关键是要写对排除的路径模式~

你要排除的是每个对比根目录下foo/dumb这个文件,但不想影响顶层dumb目录及其内容的对比,直接用diff的--exclude参数就能实现:

diff -r --exclude='foo/dumb' cool_1 cool_2

为什么这个命令能满足需求?

  • --exclude='foo/dumb'的作用是:在递归对比cool_1和cool_2时,跳过所有相对路径为foo/dumb的条目。
  • 顶层的dumb目录相对路径是dumb,完全不会被这个模式匹配到,所以它下面的file1、file2都会正常参与对比。
  • 而cool_1/foo/dumb和cool_2/foo/dumb的相对路径正好是foo/dumb,会被精准排除,不会出现在diff结果里。

如果需要更严格区分文件/目录(可选)

如果担心某个foo/dumb是目录(而你只想排除同名文件),可以结合find命令来精确筛选要对比的文件,再进行内容对比,写法稍微复杂一点,但控制更精细:

# 找出两个目录中都存在的、符合条件的文件,逐个对比内容
comm -12 <(find cool_1 -type f ! -path '*/foo/dumb' | sort) <(find cool_2 -type f ! -path '*/foo/dumb' | sort) | while read file; do
    relative_path="${file#cool_1/}"
    diff "cool_1/$relative_path" "cool_2/$relative_path"
done

这个命令会先筛选出两个目录中都存在的、不是foo/dumb的文件,再逐个对比它们的内容,完全不会涉及到排除目录的问题。

备注:内容来源于stack exchange,提问作者SirPentor

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.21 11:29:36