“查找:路径必须在表达式之前:”如何指定在当前目录中查找文件的递归搜索?
- 2024-10-22 08:29:00
- admin 原创
- 64
问题描述:
我很难找到在当前目录及其子目录中匹配的内容。
当我运行时,find *test.c
它只会给我当前目录中的匹配项。(不会在子目录中查找)
如果我尝试,find . -name *test.c
我会期望得到相同的结果,但它只给出子目录中的匹配项。当工作目录中有应该匹配的文件时,它会给出:find: paths must precede expression: mytest.c
这个错误是什么意思?我如何从当前目录及其子目录中获取匹配项?
解决方案 1:
尝试将其放在引号中——您正在运行 shell 的通配符扩展,因此您实际传递给 find 的内容将如下所示:
find . -name bobtest.c cattest.c snowtest.c
...导致语法错误。因此请尝试以下方法:
find . -name '*test.c'
请注意文件表达式周围的单引号——这些将阻止 shell(bash)扩展通配符。
解决方案 2:
实际情况是,shell 正在将“*test.c”扩展为文件列表。尝试将星号转义为:
find . -name *test.c
解决方案 3:
从查找手册:
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
解决方案 4:
尝试将其放在引号中:
find . -name '*test.c'
解决方案 5:
我看到这个问题已经得到解答了。我只想分享对我有用的方法。我在(
和之间漏了一个空格-name
。因此,选择文件并排除其中一些文件的正确方法如下;
find . -name 'my-file-*' -type f -not ( -name 'my-file-1.2.0.jar' -or -name 'my-file.jar' )
解决方案 6:
当我试图找到无法组合成正则表达式的多个文件名时,我遇到了这个问题,如@Chris J 的回答中所述,以下是对我有用的方法
find . -name one.pdf -o -name two.txt -o -name anotherone.jpg
-o
or-or
是逻辑或。有关详细信息,请参阅在 Gnu.org 上查找文件。
我正在 CygWin 上运行它。
解决方案 7:
您可以尝试以下操作:
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}')
解决方案 8:
(
当我忘记和之间的空格时出现此错误-name
。
find . -not (-name 'scripts' )
应该
find . -not ( -name 'scripts' )
解决方案 9:
问题在于脚本中如何处理命令替换和管道。您可以简化命令,而无需使用 find 命令替换。以下是更正后的脚本:
find ./test/ -maxdepth 1 -type f -print0 | xargs -0 mv -t ./test/new
如果需要使用变量fbc
,则应使用eval
才能正确执行命令:
fbc="find ./test/ -maxdepth 1 -type f -print0 | xargs -0 mv -t ./test/new"
eval ${fbc}
这应该可以修复您遇到的错误。
解决方案 10:
就我而言,我遗漏了/
路径。
find /var/opt/gitlab/backups/ -name *.tar
- 2024年20款好用的项目管理软件推荐,项目管理提效的20个工具和技巧
- 2024年开源项目管理软件有哪些?推荐5款好用的项目管理工具
- 项目管理软件有哪些?推荐7款超好用的项目管理工具
- 项目管理软件哪个最好用?盘点推荐5款好用的项目管理工具
- 项目管理软件有哪些最好用?推荐6款好用的项目管理工具
- 项目管理软件有哪些,盘点推荐国内外超好用的7款项目管理工具
- 2024项目管理软件排行榜(10类常用的项目管理工具全推荐)
- 项目管理软件排行榜:2024年项目经理必备5款开源项目管理软件汇总
- 2024年常用的项目管理软件有哪些?推荐这10款国内外好用的项目管理工具
- 项目管理必备:盘点2024年13款好用的项目管理软件