查找带有大写扩展名的文件名

40d*_*ves 2 bash sh bash-scripting

如何在目录中递归地找到所有带有大写扩展名的文件。

我试过了 :

$ find -name "*.[A-Z][A-Z][A-Z]"
Run Code Online (Sandbox Code Playgroud)

似乎有效,但当然这不会检查最后一个点后超过 3 个字母的文件。

AFH*_*AFH 5

以下适用于简单情况:

find -name "*.*[A-Z]*" ! -name "*.*[^A-Z]*"
Run Code Online (Sandbox Code Playgroud)

对于名称中包含两个或更多点的文件,它可能会失败。对于这种情况,您需要使用正则表达式,例如grep

find | grep '\.[A-Z][A-Z]*$'
Run Code Online (Sandbox Code Playgroud)

egrep

find | egrep '\.[A-Z]+$'
Run Code Online (Sandbox Code Playgroud)

按照 Kamil Maciorowski 的评论,可以通过使用[:upper:]代替来使答案与区域设置无关A-Z,如下所示:

find | egrep '\.[[:upper:]]+$'
Run Code Online (Sandbox Code Playgroud)

恐怕我们以英语为母语的人很容易忘记这些事情。