Awk 查找不包含小写字母的文件列表

Awk 查找不包含小写字母的文件列表,awk,find,solaris,Awk,Find,Solaris,尝试了几十次迭代,但似乎找不到正确的组合。我正在使用find创建子目录和文件的列表。我想省略任何包含小写字符的文件名。我正在将输出传输到awk以进行进一步处理,因此如果在那里更容易,那就好了。我(分别)尝试了find和awk find。我使用的是Solaris 10 Unix,如果这有什么区别的话 输入文件列表: FOO/BAR.TXT FOO/bar.TXT FOO/BAT.TXT BAZ/BAR.TXT BAZ/baz.TXT 期望输出 FOO/BAR.TXT FOO/BAT.TXT BA

尝试了几十次迭代,但似乎找不到正确的组合。我正在使用find创建子目录和文件的列表。我想省略任何包含小写字符的文件名。我正在将输出传输到awk以进行进一步处理,因此如果在那里更容易,那就好了。我(分别)尝试了find和awk find。我使用的是Solaris 10 Unix,如果这有什么区别的话

输入文件列表:

FOO/BAR.TXT
FOO/bar.TXT
FOO/BAT.TXT
BAZ/BAR.TXT
BAZ/baz.TXT
期望输出

FOO/BAR.TXT
FOO/BAT.TXT
BAZ/BAR.TXT
My find包含其他排除项,仅显示示例

find ! \( -name 'FRED*' -o \
      -name '*JONES' -o \
      -name '*[a-z]8'  \) 
我还尝试将小写否定词移动到一个nawk查找,例如:

find ! \( -name 'FRED*' -o \
      -name '*JONES'  \) 
    | nawk  -F'/' '!/a-z/ {print $2}'
我尝试的每一次迭代要么不给我任何输出,要么全部输出,包括带有小写字符的文件名


有任何帮助非常感谢。

让我们考虑一个带有这些文件的目录:

$ find . -type f
./FOO/BAT.TXT
./FOO/bar.TXT
./FOO/BAR.TXT
./BAZ/BAR.TXT
./BAZ/baz.TXT
要排除名称中包含一个或多个小写字符的所有文件,请执行以下操作:

$ find . -regextype egrep -type f -regex '[^[:lower:]]*'
./FOO/BAT.TXT
./FOO/BAR.TXT
./BAZ/BAR.TXT
注:

  • [:lower::
    是匹配任何小写字符的POSIX正则表达式。 这是安全的<代码>[^[:lower:]匹配除小写字母以外的任何字符<代码>[^[:lower:][]*匹配不包含小写字符的任何字符序列

  • Find的
    -regex
    将此regex应用于整个路径,并坚持它从头到尾匹配,就像它是
    ^[^[:lower:]*$
    一样

  • Find支持多种正则表达式样式。我选择了包含常用POSIX扩展正则表达式的
    egrep
    样式


  • 如果目录名包含小写字母,但文件名不包含小写字母,例如
    foo/BAR.TXT
    ,该怎么办?AWK中的字符范围写在代码> [AZ] < /代码>,就像您在<代码>查找< /代码>中所使用的,BTW.还考虑切换到/UR/XPG4/BI/AWK,而不是NaWK,因为NWK是非常旧的和PrimePOX(这就是为什么您需要使用<代码> [AZ] < /代码>而不是<代码> [[::下:] /<代码>),而/UR/XPG4/BI/AWK更现代和[几乎]。POSIX.
    find.|grep-v\[a-z\]
    不要排除
    -name'*[a-z]8'
    ,而是尝试
    -name'*[a-z]*'