我很难找到在当前目录及其子目录中查找匹配项。
当我运行 find *test.c
时,它只会给我当前目录中的匹配项。 (不查看子目录)
如果我尝试 find . -name *test.c
,我会期望得到相同的结果,但它只会给我一个子目录中的匹配项。当工作目录中有应该匹配的文件时,它会给我:find: paths must precede expression: mytest.c
此错误是什么意思,如何从当前目录及其子目录中获取匹配项?
试着把它放在引号里——你遇到了 shell 的通配符扩展,所以你实际传递给 find 的内容如下所示:
find . -name bobtest.c cattest.c snowtest.c
...导致语法错误。所以试试这个:
find . -name '*test.c'
请注意文件表达式周围的单引号 - 这些将阻止 shell (bash) 扩展您的通配符。
发生的事情是外壳正在将“*test.c”扩展为文件列表。尝试将星号转义为:
find . -name \*test.c
find . -name '*txt'
试着把它放在引号中:
find . -name '*test.c'
从查找手册:
NON-BUGS
Operator precedence surprises
The command find . -name afile -o -name bfile -print will never print
afile because this is actually equivalent to find . -name afile -o \(
-name bfile -a -print \). Remember that the precedence of -a is
higher than that of -o and when there is no operator specified
between tests, -a is assumed.
“paths must precede expression” error message
$ find . -name *.c -print
find: paths must precede expression
Usage: find [-H] [-L] [-P] [-Olevel] [-D ... [path...] [expression]
This happens because *.c has been expanded by the shell resulting in
find actually receiving a command line like this:
find . -name frcode.c locate.c word_io.c -print
That command is of course not going to work. Instead of doing things
this way, you should enclose the pattern in quotes or escape the
wildcard:
$ find . -name '*.c' -print
$ find . -name \*.c -print
我看到这个问题已经回答了。我只想分享对我有用的东西。我在 (
和 -name
之间缺少一个空格。因此,选择排除其中一些文件的正确方法如下所示;
find . -name 'my-file-*' -type f -not \( -name 'my-file-1.2.0.jar' -or -name 'my-file.jar' \)
当我试图找到多个文件名时遇到了这个问题
find . -name one.pdf -o -name two.txt -o -name anotherone.jpg
-o
或 -or
是逻辑或。有关详细信息,请参阅 Finding Files on Gnu.org。
我在 CygWin 上运行它。
你可以试试这个:
cat $(file $( find . -readable) | grep ASCII | tr ":" " " | awk '{print $1}')
有了它,您可以使用 ascii 找到所有可读文件并使用 cat 读取它们
如果你想指定他的体重并且不可执行:
cat $(file $( find . -readable ! -executable -size 1033c) | grep ASCII | tr ":" " " | awk '{print $1}')
就我而言,我在路径中缺少尾随 /
。
find /var/opt/gitlab/backups/ -name *.tar
/
。
echo *test.c
,您可以看到发生了什么……结果不会是扩展通配符的 echo,而是 shell 本身。简单的教训是,如果您使用通配符,请引用文件规范:-)find . -type f -printf ‘%TY-%Tm-%Td %TT %p\n’
,但遇到了“路径必须先于表达式”。问题是引号太“聪明”。我重新输入了命令,导致引号被替换,然后它运行了。find
- 如果使用通配符*.$variable
,则需要双引号。*
,如其他用户在此处所述。关于臭名昭著的find
的有用指南可以在here中找到