【问题标题】:find does not find recursively [closed]find 没有找到递归[关闭]
【发布时间】:2013-04-10 16:20:24
【问题描述】:

我在目录“home”中,我运行这个命令

find . -iname *.mov

它会产生

./root/movies/Corey/holtorf/Intro.mov

现在,我“cd ..”并运行相同的命令

find . -iname *.mov

这次“Intro.mov”不在结果中。 这背后的原因是什么? 递归搜索当前目录中每个以“.mov”结尾的文件的命令是什么?谢谢。

【问题讨论】:

    标签: linux shell find


    【解决方案1】:

    当在参数中使用通配符时,它会被 shell 扩展。为了防止这种情况,你需要写“*.mov”。

    在您的情况下,shell 会扩展到它在 将参数传递给 find 之前找到的任何文件,然后它会获取文件列表并且不会根据原始模式进行搜索。

    【讨论】:

      【解决方案2】:

      如果您的主目录实际上是一个符号链接,您可能需要添加 -follow。还要引用该模式,否则 shell 会在将其传递给 find 之前尝试扩展它。

      find . -iname "*.mov" -follow
      

      【讨论】:

        【解决方案3】:

        我还不能发表评论,所以我会发布这个作为答案(我提前道歉)。

        请查看此帖子"find: paths must precede expression:" How do I specify a recursive search that also finds files in the current directory?

        以及可能对您有益的其他信息: 要在当前目录中递归查找具有特定名称的文件,可以使用 grep 或 find

        grep -r "*.mov" .
        

        或用于不区分大小写的搜索

        grep -ri "*.mov" .
        

        寻找

        find . -type f -exec grep -l "*.mov" {} +
        

        也是一个有用的链接http://www.cyberciti.biz/faq/howto-recursively-search-all-files-for-words/

        【讨论】:

          【解决方案4】:

          我会使用:

           grep -rn 'mov' .
          

          递归数字搜索

          【讨论】:

          • 由于某种原因,这比使用我的 shell GNU bash, version 5.0.11(1)-release (x86_64-apple-darwin18.6.0)find 慢很多。算法之间一定存在显着差异。
          猜你喜欢
          • 2019-12-11
          • 2019-08-06
          • 2015-06-09
          • 1970-01-01
          • 2015-11-27
          • 2013-03-28
          • 1970-01-01
          • 1970-01-01
          • 2013-01-18
          相关资源
          最近更新 更多