如何删除当前目录中的所有文件 - 但不删除标题中1.65
的文件?
我尝试用
捕获这些文件*[^1][^\.][^6][^5]*
*[^\(1\.65\)]*
(可以按Alt-*
展开正则表达式)
但它不起作用。这是一个实验代码:
touch foo1.65bar \#bla1.66 qbit0.65t 1.65boris notRelated@All
答案 0 :(得分:4)
将find用于此类工作通常更加可靠和富有表现力:
find -mindepth 1 -maxdepth 1 '(' -type f -and -not -name '*1\.65*' ')' -delete
答案 1 :(得分:3)
您可以使用extended globbing ..(bash 4)
touch a b c foo1.65bar foo1_65bar
ls
echo ======
shopt -s extglob
rm !(*1.6*)
ls
输出
a b c foo1_65bar foo1.65bar
=====
foo1.65bar
答案 2 :(得分:0)
你可以在Ruby,Python,Perl等文件名上使用下面的正则表达式。然后你必须用所选语言编写一个小脚本或一个班轮来完成这项工作。它使用负向前瞻。 (CFR)。 Lookahead and Lookbehind Zero-Width Assertions
^((?!1\.65).)*$
如果要构建与特定字符串不匹配的正则表达式,则不能使用[]
,因为它指定了单个字符,而不是按顺序指定所有字符。你必须使用环绕构造。