2013-04-10 30 views
10

我在目录下的“家”是,我运行此命令找到没有找到递归

find . -iname *.mov 

和它产生

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

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

find . -iname *.mov 

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

回答

20

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

在你的情况下,外壳扩展到它找到的任何文件之前传递参数来查找,然后获取文件的列表,并将不会基于原始模式进行搜索。

16

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

find . -iname "*.mov" -follow 
4

我还不能评论,所以我会张贴这个答案(我提前道歉)。

请看看这篇文章"find: paths must precede expression:" How do I specify a recursive search that also finds files in the current directory?

和附加信息,可能有利于你: 要递归找到在当前目录特定名称的文件时,您可以使用grep的或发现

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/

1

我会用:

grep -rn 'mov' . 

递归数字搜索