如何在 bash 中找到所有不以给定前缀开头的文件?

问题描述 投票:0回答:6

我的文件夹中有一堆文件:

foo_1 
foo_2
foo_3
bar_1
bar_2
buzz_1
...

我想找到所有以给定前缀开头的文件,并将列表保存到文本文件中。 以下是 do 具有给定前缀的文件的示例:

find bar_* > Positives.txt
bash shell unix grep find
6个回答
13
投票

如果您也正在创建子目录:

find . ! -name "bar_*"

或者,等价地,

find . -not -name "bar_*"

7
投票

这应该可以在任何 shell 中发挥作用

ls | grep -v '^prefix'

-v 选项反转 grep 的搜索逻辑,使其过滤掉所有匹配项。 使用 grep 而不是 find,您可以使用强大的正则表达式而不是有限的全局模式。


5
投票

您想要查找以 bar_* 开头的文件名

不是

递归:

find ! -name 'bar_*' > Negatives.txt

顶级目录:

find -maxdepth 1 ! -name 'bar_*' > Negatives.txt

0
投票

使用扩展的 glob:

shopt -s extglob
ls !(bar_*) > filelist.txt

!(pattern)
匹配任何 but
pattern
,因此
!(bar_*)
是任何 not
bar_
开头的文件名。


0
投票

使用 bash 和通配符:

ls [!bar_]*
。 有一个警告:字母的顺序并不重要,因此
rab_something.txt
将不会列出。


0
投票

就我而言,我有一个额外的要求,文件必须以

.py
扩展名结尾。所以我用:

find . -name "*.py" | grep -v prefix_

在您的情况下,只需使用

prefix_
排除文件:

find . | grep -v prefix_

请注意,这包括所有子目录。有很多方法可以做到这一点,但对于那些已经熟悉

find
grep -v
(不包括结果)的人来说,可以很容易记住。

© www.soinside.com 2019 - 2024. All rights reserved.