找不到递归

时间:2013-04-10 16:20:24

标签: linux shell find

我在目录“home”中运行此命令

find . -iname *.mov

并生成

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

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

find . -iname *.mov

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

4 个答案:

答案 0 :(得分:21)

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

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

答案 1 :(得分:17)

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

find . -iname "*.mov" -follow

答案 2 :(得分:4)

我无法评论,所以我会将此作为答案发布(我提前道歉)。

请查看此帖子"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/

答案 3 :(得分:1)

我会用:

 grep -rn 'mov' .

递归数字搜索