适用于“find”的正则表达式

A regex that works in `find`

我有一个包含 ~8000 个格式文件的目录

output/Manuscript_00750_AnimalGiants-compact.json
output/Manuscript_00750_AnimalGiants-expanded.json
output/Manuscript_00750_AnimalGiants.json
output/Manuscript_00752_AnimalGiants-compact.json
output/Manuscript_00752_AnimalGiants-expanded.json
output/Manuscript_00752_AnimalGiants.json
output/Unit_TZH_12345_Foo-compact.json
output/Unit_TZH_12345_Foo-expanded.json
output/Unit_TZH_12345_Foo.json

我需要想出一个正则表达式来使用 find 工具来 select 仅手稿紧凑型:

output/Manuscript_00750_AnimalGiants-compact.json
output/Manuscript_00752_AnimalGiants-compact.json

想出正则表达式是容易的部分,但让 find 合作是困难的部分。

这是我的正则表达式:

/Manuscript[0-9_a-zA-Z]+-compact\.json/

以下是我尝试过的一些命令;都产生零结果。 cwd就是上面的目录output/:

find output -regex "Manuscript[0-9_a-zA-Z]+-compact\.json"
find output -regex "\./output/Manuscript[0-9_a-zA-Z]+-compact\.json/"
find output -regex ".*\Manuscript[0-9_a-zA-Z]+-compact.*\json"

但此命令确实会产生结果 - 它 select 是所有以 "Manuscript" 开头的文件,这显然太宽泛了:

find output -regex ".*\Manuscript.*\json"

此处 find 的正确正则表达式格式是什么?

在 OSX 上,您可以将此 find 与扩展正则表达式一起使用:

find -E output -regex '.*/Manuscript[0-9_a-zA-Z]+-compact\.json$'

在 gnu find 上使用:

find output -regextype posix-extended -regex '.*/Manuscript[0-9_a-zA-Z]+-compact\.json$'