查找扩展名前带有大写字母和扩展名中带有小写字母的文件

yar*_*one 4 command-line scripts files

我需要在远程位置 (/mnt/) 中查找文件,并在文件名符合以下条件时发出警报:

  1. 文件名只能包含大写字母或数字。

  2. 文件扩展名只能包含小写字母。

消极的方式也将起作用。

例子:

if-文件名包含小写字母和/或扩展名包含大写字母

然后-回声警报

des*_*ert 7

使用find搜索文件:

find . -regex ".*/[A-Z0-9]+\.[a-z]+"
Run Code Online (Sandbox Code Playgroud)

这将在当前目录 ( .) 中执行搜索,也递归地遍历子目录。

  • [.*/] 覆盖文件路径
  • [A-Z0-9]代表从 A 到 Z 的每个字母(包括例如@vidarlo 提到的 Å)和从 0 到 9 的每个数字
  • + 匹配前面的字符或表达式一次或多次
  • \. 是一个文字点
  • [a-z]代表从 a 到 z 的每个字母

对于某些特殊字符,可能需要使用 eg[[:upper:]]来代替:

find . -regextype egrep -regex ".*/[[:upper:][:digit:]]+\.[[:lower:]]+"
Run Code Online (Sandbox Code Playgroud)

编辑的问题

要结合find的测试有-a-o,为您例如,这可以帮助:

find /mnt/ \( -name "*[a-z]*.*" -o -name "*.*[A-Z]*" \) -exec echo {} +
Run Code Online (Sandbox Code Playgroud)