【发布时间】:2019-12-07 01:37:36
【问题描述】:
希望是一个简短的问题,我很生气以至于我自己似乎无法弄清楚:
我正在尝试列出文件名中只有主要版本的所有 Mac 库,如
libFoo.X.dylib
其中 X 是小数(在我的例子中是单个数字)。
我正在使用
find /path/to/here -name "lib[^.]*.[0-9].dylib"
认为这应该给我包含的文件名 - 以“lib”开头且没有点的部分 - 一个点 - 一个数字 - .dylib 扩展名
但我也得到了libfoo.0.1.2.dylib 类型的文件,所以我的假设一定有问题。
【问题讨论】:
-
-nameaccepts shell globing 模式,而不是正则表达式。请改用-regex。在 Linux 中始终使用man页面,这是信息的第一来源。 -
呃,我在问这里之前当然做了 RTFM(很明显我不是在 linux 上做这个!)。你是说 shell glob[b]ing 不能做我想做的事吗?
-
@RJVB, ...由 bash 实现,shell globbing 确实足够强大,可以做你想做的事,因为它有可选的 extglob 语法(启用
shopt -s extglob,+([^.])匹配一个-或更多非点的东西)——但对于find,你需要传统的fnmatch风格的通配符,它确实没有“零或多”或“一或多”修饰符,所以你可以'不要说你想在一个位置上放任意数量的非点的东西;因此需要适当的正则表达式。