我想使用 find 来查找目录中以小写字母开头的每个文件。 一个简单的正则表达式与 find 相结合应该可以解决这个问题(我不需要处理文件名中的空格)。
所以我尝试 find 。 -regextype posix-egrep -regex '^.*/[a-z][^/]*$' -type f
.除了我认为不应该匹配的其他内容之外,它还返回了 ./config/Config.scala
。
所以我认为我的正则表达式是错误的,并使用egrep本身对其进行了测试:echo './config/Config.scala' | egrep '^.*/[a-z][^/]*$'
。没有匹配。
我缺少的 find
正在做什么?我已经知道 -regex
对相对文件路径而不是文件名进行操作(我不喜欢,但这是另一个问题)。查找版本为4.4.2
最佳答案
我尝试用这一系列命令进行重现:
mkdir testtmp
cd testtmp
mkdir config
touch config/Config.scala
find . -regextype posix-egrep -regex '^.*/[a-z][^/]*$' -type f
没有输出。我还找到了 4.4.2,由 Debian 打包。
更新
我敢打赌这是一个区域设置问题,[a-z]
匹配的内容超出了我们都知道应该匹配的 26 个小写字母。试试这个:
LC_ALL=C find . -regextype posix-egrep -regex '^.*/[a-z][^/]*$' -type f
关于regex - 尽管使用了 regextypeegrep,为什么 GNU find 实用程序在正则表达式和 egrep 上生成不同的匹配项?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11309239/