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

如何使用Bash查找文件夹内内容包含自身文件名的文件?

用Bash筛选内容包含自身文件名的文件

方法1:遍历当前目录的普通文件

直接用shell循环配合grep实现,适合只处理当前目录的场景:

for file in *; do
  if [ -f "$file" ]; then
    grep -q "$file" "$file" && echo "$file"
  fi
done

各部分说明:

  • for file in *:遍历当前目录下的所有条目
  • [ -f "$file" ]:只处理普通文件,跳过目录、符号链接等非文件类型
  • grep -q "$file" "$file":-q是静默匹配模式,不输出匹配内容,仅返回结果状态;第一个"$file"是要搜索的文件名,第二个是目标文件
  • && echo "$file":如果grep找到匹配(文件内容包含自身文件名),就输出该文件名

方法2:递归处理所有子目录文件

如果需要覆盖子目录里的文件,用find命令更高效:

find . -type f -exec sh -c 'grep -q "$(basename "$1")" "$1" && echo "$1"' sh {} \;

各部分说明:

  • find . -type f:从当前目录开始,递归查找所有普通文件
  • -exec sh -c '...' sh {} \;:对每个找到的文件执行内嵌的shell脚本
  • basename "$1":提取文件的纯文件名(去掉路径部分),避免因内容里没有完整路径导致漏判
  • 同样通过grep -q判断匹配,符合条件就输出文件的完整路径

额外提示

  • 如果需要忽略大小写匹配,给grep加上-i参数,比如grep -qi "$file" "$file"
  • 命令里的双引号已处理文件名含空格、特殊字符(如*、?)的情况,无需额外转义

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 16:45:23