基于文件名模式的Linux文件搜索

55

我想根据文件名搜索一系列文件。

这是我的目录:

enter image description here

比如上面的例子,我只想搜索没有 _bak 的文件。


1
你使用哪种编程语言?用了哪些API? - sarnold
你的问题太过笼统,难以给出好的答案。你是想搜索文件内容吗?还是仅想获取不以“_bak”结尾的文件名? - David Cain
此外,您应该将目录内容以纯文本形式发布,而不是图片。请参阅格式化帮助 - David Cain
1
我不确定混淆在哪里。OP已经标记了linux``unix,并且正在询问如何挑选结尾没有_bak的文件。我有什么遗漏吗?(虽然格式问题是真的。你应该使用纯文本。) - Tim Pote
问题对我来说似乎很清楚。模式以“ei469390ONL00”开头,看起来像是Windows而不是Linux,因此使用dir命令。 - HelpVampire666
这个问题是 List files not matching a pattern? 的重复。 - EvgenKo423
3个回答

78
如果你想要限制搜索范围只在当前目录内,可以使用以下代码:
find . -maxdepth 1 -mindepth 1 ! -name '*_bak'
如果你想要在所有目录中递归搜索,请移除 -maxdepth 1 参数。

根据问题提出者的评论进行编辑

如果你想要获取以 ei 开头且不以 _bak 结尾的文件,请使用以下命令:

find . -type f -name 'ei*' -a ! -name '*_bak'

1
嗨,Tim Pote,如果不加上-maxdepth 1 -mindepth 1,你的答案就很好。感谢你的帮助。 - crchin
@user1154655 根据您的建议已进行更改。 - Tim Pote
请注意,您必须使用引号或双引号。这样做是错误的:find . -name *_bak,因为shell会将*_bak替换为当前目录中匹配的文件名,导致通常会出现“未知的主要操作符”错误。请像这里的答案一样使用引号或双引号。 - Rian Rizvi

6
请试一下这个:
 find . -type f ! -iname "*_bak"

上述命令将找到所有没有以_bak结尾的文件。

该命令非常有用。谢谢。如果目录中还包含其他文件,但我只想搜索以“ei”开头且没有“bak”后缀的文件名? - crchin
2
这将执行 find . -name 'ei*' -type f ! -iname "*_bak" - AzizSM

-2

使用Grep反向匹配选项。

例如,如果您想要所有没有单词_bak的文件,请使用:

grep -v *_bak /path/to/file

嗨,Erwald,你的答案不起作用,但还是谢谢你的帮助。 - crchin
1
grep would work if you pipe the output of ls to it. e.g. ls . | grep -v _bak - Tymric

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接