尝试了几十次迭代,但似乎找不到合适的组合。我使用find来创建子目录和文件列表。我想省略任何包含小写字符的文件名。我将输出管道输出到awk进行进一步处理,所以如果它更容易,那就没问题了。我已经尝试了find和awk(单独)。我在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
我的查找包含其他排除项,仅举例说明
find ! \( -name 'FRED*' -o \
-name '*JONES' -o \
-name '*[a-z]8' \)
我也尝试将小写否定移到nawk发现中,例如:
find ! \( -name 'FRED*' -o \
-name '*JONES' \)
| nawk -F'/' '!/a-z/ {print $2}'
我尝试的每次迭代都没有输出,或者所有输出都包含带小写字符的文件名。
非常感谢任何帮助。
答案 0 :(得分:1)
让我们考虑一下这些文件的目录:
$ 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正则表达式。
这是unicode安全的。 [^[:lower:]]
匹配除小写字母以外的任何字符。 [^[:lower:]]*
匹配任何不包含小写字符的字符序列。
查找-regex
将此正则表达式应用于整个路径并坚持它从头到尾匹配,就好像它是^[^[:lower:]]*$
一样。
Find支持各种各样的正则表达式样式。我选择了egrep
样式,其中包括通常的POSIX扩展正则表达式。