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

GNU findutils执行find -name *.txt搜索结果随工作目录不一致问题

问题原因分析

该差异由Shell的通配符(globbing)预展开机制导致,与find命令本身逻辑无关

你执行的find /home -name *.txt未对*.txt做引号包裹或转义处理,Shell会在调用find命令之前,先尝试将*.txt通配符展开为当前工作目录下所有匹配该规则的文件名列表,再把展开后的参数传给find执行,两种场景的具体差异如下:

  • 当前工作目录为/tmp时:

    该目录下没有匹配*.txt的文件,Shell无法完成通配符展开,会直接将*.txt作为参数原样传给find。此时find实际执行的规则是「在/home路径下搜索所有名称匹配*.txt的文件」,因此会返回两个符合要求的结果。

  • 当前工作目录为/home/bob时:

    该目录下存在匹配*.txt的文件1.txt,Shell会直接将*.txt展开为1.txt,最终传给find的实际命令为find /home -name 1.txt,因此搜索结果仅会返回名称为1.txt的匹配文件。

修正方案

要让通配符规则直接交给find处理,需要对匹配规则做转义或引号包裹,以下三种写法均可以得到稳定的正确结果:

  • find /home -name '*.txt'(单引号包裹,Shell不会处理单引号内的任何内容)
  • find /home -name "*.txt"(双引号包裹,不会触发通配符展开)
  • find /home -name \*.txt(对通配符星号做转义,避免Shell识别为通配符标记)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 02:54:00