我尝试了解如何将find
命令与正则表达式一起使用(macOS 14.4.1、Zsh 5.9)。
note-red.png
我有一个目录,其中包含、note-yellow.png
、(和其他颜色)、folder-red.png
、 、(和其他颜色)等文件folder-yellow.png
,但是在该文件夹中执行以下命令时不会显示任何结果。我做错了什么?
find -E . -regex '^(note|folder)'
find -E . -regex '^(note|folder).+'
RE 的结构不正确。有关详细信息,请参阅
man find
Mac 上的内容,其中写道:所以你需要使用
-regex '.*/(note|folder)-.*'
.您已经注意到使用启用 ERE 交替的要求
-E
(以及分组语法从 更改为\(...\)
)(...)
,所以这很好:note-
或者为了更精确的匹配(不匹配恰好以或开头的中间目录名称folder-
),您还可以使用标准
-name
测试来匹配这两种模式:或者既然您正在使用
zsh
,请使用其递归 glob 而不是find
:(还避免了
./
路径上的前缀,并为您提供一个排序列表(您可以使用限定符来避免oN
),并使编写隐藏文件脚本变得更容易(通过删除D
限定符),尽管可能会更慢)。