“find:paths必须在表达式之前:”如何指定也在当前目录中查找文件的递归搜索?

时间:2011-06-27 15:51:35

标签: linux bash find

我很难找到查找来查找当前目录及其子目录中的匹配项。

当我运行find *test.c时,它只给我当前目录中的匹配项。 (不查看子目录)

如果我尝试find . -name *test.c我会期望相同的结果,但它只给我一个子目录中的匹配。如果有工作目录中应该匹配的文件,它会给我:find: paths must precede expression: mytest.c

此错误意味着什么,以及如何从当前目录及其子目录中获取匹配项?

7 个答案:

答案 0 :(得分:355)

尝试将它放在引号中 - 你正在进入shell的通配符扩展,所以你正在寻找的内容看起来像:

find . -name bobtest.c cattest.c snowtest.c

...导致语法错误。所以试试这个:

find . -name '*test.c'

请注意文件表达式周围的单引号 - 这些将停止shell(bash)扩展通配符。

答案 1 :(得分:25)

正在发生的事情是shell正在将“* test.c”扩展为文件列表。尝试将星号转义为:

find . -name \*test.c

答案 2 :(得分:14)

尝试将其放在引号中:

find . -name '*test.c'

答案 3 :(得分:9)

从查找手册:

omg.cpp

答案 4 :(得分:1)

我看到这个问题已经回答了。我只想分享对我有用的东西。我在 (-name 之间缺少一个空格。因此,正确选择文件并排除其中一些文件的方法如下所示;

find . -name 'my-file-*' -type f -not \( -name 'my-file-1.2.0.jar' -or -name 'my-file.jar' \) 

答案 5 :(得分:0)

就我而言,我在路径中缺少尾随/

find /var/opt/gitlab/backups/ -name *.tar

答案 6 :(得分:0)

当我尝试查找无法按正则表达式组合的多个文件名时遇到了这个问题,如@Chris J的答案所述,这对我有用

find . -name one.pdf -o -name two.txt -o -name anotherone.jpg

-o-or是逻辑或。有关更多信息,请参见Finding Files on Gnu.org

我在CygWin上运行它。