我的文件夹中有一堆文件:
foo_1
foo_2
foo_3
bar_1
bar_2
buzz_1
...
我想找到所有不以给定前缀开头的文件,并将列表保存到文本文件中。 以下是 do 具有给定前缀的文件的示例:
find bar_* > Positives.txt
如果您也正在创建子目录:
find . ! -name "bar_*"
或者,等价地,
find . -not -name "bar_*"
这应该可以在任何 shell 中发挥作用
ls | grep -v '^prefix'
-v 选项反转 grep 的搜索逻辑,使其过滤掉所有匹配项。 使用 grep 而不是 find,您可以使用强大的正则表达式而不是有限的全局模式。
您想要查找以 bar_*
开头的文件名
不是?
递归:
find ! -name 'bar_*' > Negatives.txt
顶级目录:
find -maxdepth 1 ! -name 'bar_*' > Negatives.txt
使用扩展的 glob:
shopt -s extglob
ls !(bar_*) > filelist.txt
!(pattern)
匹配任何 but pattern
,因此 !(bar_*)
是任何 not 以 bar_
开头的文件名。
使用 bash 和通配符:
ls [!bar_]*
。 有一个警告:字母的顺序并不重要,因此 rab_something.txt
将不会列出。
就我而言,我有一个额外的要求,文件必须以
.py
扩展名结尾。所以我用:
find . -name "*.py" | grep -v prefix_
在您的情况下,只需使用
prefix_
排除文件:
find . | grep -v prefix_
请注意,这包括所有子目录。有很多方法可以做到这一点,但对于那些已经熟悉
find
和 grep -v
(不包括结果)的人来说,可以很容易记住。