【发布时间】:2018-04-02 19:34:34
【问题描述】:
尝试了几十次迭代,但似乎找不到合适的组合。我正在使用 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
我的查找包含其他排除项,仅作为示例显示
find ! \( -name 'FRED*' -o \
-name '*JONES' -o \
-name '*[a-z]8' \)
我还尝试将小写否定移动到 nawk 查找中,例如:
find ! \( -name 'FRED*' -o \
-name '*JONES' \)
| nawk -F'/' '!/a-z/ {print $2}'
我尝试过的每次迭代要么没有输出,要么所有输出包括带有小写字符的文件名。
非常感谢任何帮助。
【问题讨论】:
-
如果目录名包含小写字母但文件名不包含会发生什么,例如
foo/BAR.TXT? awk 中的字符范围写为[a-z],就像您在find中使用的一样,顺便说一句。此外,请考虑切换到 /usr/xpg4/bin/awk 而不是 nawk,因为 nawk 非常古老并且是 POSIX 之前的(这就是为什么您需要使用[a-z]而不是[[:lower:]])而 /usr/xpg4/bin/ awk 更现代,[几乎] POSIX。 -
find . | grep -v \[a-z\] -
不排除
-name '*[a-z]8',试试-name '*[a-z]*'