我在文件夹中有一堆文件:
foo_1
foo_2
foo_3
bar_1
bar_2
buzz_1
...
我想查找不以给定前缀开头的所有文件,并将列表保存到文本文件中。以下是执行具有给定前缀的文件的示例:
find bar_* > Positives.txt
答案 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_
请注意,这包括所有子目录。这样做的方法很多,但是对于已经熟悉find
和grep -v
却不包括结果的人来说,它很容易记住。