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

时间:2014-01-26 20:34:53

标签: bash shell unix grep find

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

foo_1 
foo_2
foo_3
bar_1
bar_2
buzz_1
...

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

find bar_* > Positives.txt

6 个答案:

答案 0 :(得分:6)

如果你也在做子目录:

find . ! -name "bar_*"

答案 1 :(得分:5)

这应该在任何shell

中完成
ls | grep -v '^prefix'

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

答案 2 :(得分:5)

您想要从bar_*开始找到而非的文件名吗?

递归:

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

热门目录:

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

答案 3 :(得分:0)

使用bash和通配符:[^a-zA-Z]+ 。有一点需要注意:字母的顺序并不重要,因此不会列出ls [!bar_]*

答案 4 :(得分:0)

扩展全球:

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

!(pattern)匹配任何 pattern,因此!(bar_*)以{{1}开头的任何文件名}。

答案 5 :(得分:0)

就我而言,我还有一个额外要求,文件必须以.py扩展名结尾。所以我用:

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

对于您而言,仅排除带有prefix_的文件:

find . | grep -v prefix_

请注意,这包括所有子目录。这样做的方法很多,但是对于已经熟悉findgrep -v却不包括结果的人来说,它很容易记住。