使用引号查找命令导致“没有这样的文件”

问题描述 投票:-1回答:1

在我的目录中有文件:

file1.txt  fix.log  fixRRRRRR.log  fixXXXX.log  output.txt

为了理解find命令,我尝试了很多其他东西,我想用2个通配符。目标是查找以f开头并以l开头的扩展名的文件。

$ find . f*.l*

./file1.txt
./fix.log
./fixRRRRRR.log
./output.txt
./fixXXXX.log
fix.log
fixRRRRRR.log
fixXXXX.log

我在论坛中读到了使用引号找到find . "f*.l*"的结果:`

./file1.txt
./fix.log
./fixRRRRRR.log
./output.txt
./fixXXXX.log

它导致find: ‘f*.l*’: No such file or directory

我做错了什么,我的推理错误在哪里?

谢谢你的回答。

linux bash shell command-line terminal
1个回答
2
投票

找不到那样的工作。一般来说,find的呼叫形式如下:

find [entry1] [entry2] ... [expressions ...]

条目是查找开始搜索文件的起点。

在您的情况下,您实际上没有提供任何表达式。

在第一个命令(没有引号)中,shell将通配符扩展为匹配文件列表(在当前目录中),然后将列表作为参数传递给find。所以find . f*.l*基本上相当于find . fix.log fixRRRRRR.log fixXXXX.log。结果,find将所有这些参数视为要搜索的目录/文件(不是要搜索的模式),并列出.下的所有文件,(所有)然后fix.log下的所有文件(它不是目录,所以这只是文件本身),然后fixRRRRRR.log下的所有文件,最后fixXXXX.log下的所有文件。

在第二个(带引号)中,它搜索当前目录(。)下的所有文件,并对名为“f * .l *”的文件尝试相同的文件。

实际上你可能正在寻找“-name”表达式,可以像这样使用:

find . -name "f*.l*"  
© www.soinside.com 2019 - 2024. All rights reserved.