如何在Linux中删除所有文件名均为大写的文件?

3

假设我有一个目录,其中包含以下文件:

ls

ABC BCD CDE DEF abc bcd cde def Abc

如何删除所有文件名全为大写字母的文件?(在这种情况下,删除ABC BCD CDE DEF


提示:将basenametr '[:lower:]' '[:upper:]'的输出进行比较(暂时无法测试)。 - Matthieu
2个回答

3

使用GNU find命令:

find . -maxdepth 1 ! -name '*[![:upper:]]*' -delete

请注意,这不会进入子目录,也不会删除文件名全部大写的非空目录。

@Enrico,请不要再对我的答案进行不必要的编辑。 - oguz ismail
@Enrico!和^不是同义词,!是shell模式匹配符号中括号表达式的正确否定运算符;^在bash或其他实现中可能是同义词,但POSIX不将其视为!的同义词。任何人都可以查阅手册/标准并从中获取必要的信息;我不必将相关部分复制粘贴到我发布的每个答案中。最后,我真的不在乎虚拟互联网积分。 - oguz ismail
2
没有理由因为一个好的质量回答不够完美就给它点踩。话说到这里,再见。 - Enlico
值得注意的是,该代码将删除名称全为大写字母的“空”子目录。 - pjh

1
shopt -s extglob
rm ./!(*[![:upper:]]*)

这首先在bash中启用了扩展的globbing模式,然后使用扩展的globbing模式./!(*[![:upper:]]*)匹配当前目录中所有不包含任何非大写字符(即只有大写字符)的名称。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接