Linux 使用正则表达式查找命令并写入工作异常的文件

Linux find-command with regex and write in a file working strange

所以我有一个包含 .wav 文件的文件夹,如下所示:

afr_(4 digits)_(random digits).wav

我想创建一个列表,其中包含所有以 afr_0184_ 和 afr_1919_ 开头的文件,我使用此 linux 命令行

find /directory/ -name "arf_0184_*.wav" -o -name "afr_1919_*.wav" > train.list

出于某种原因,列表中只有 afr_1919_ 个文件,就好像它覆盖了之前找到的 afr_0184_ 个文件。

我也试过这个

find /directory/ -name 'afr_(0184|1919)_*.wav' > train.list

但在这种情况下列表是空的。

我做错了什么?

您可以使用

find /directory/ -regextype posix-egrep -regex '.*/afr_(0184|1919)_[0-9]*\.wav' > train.list

要匹配任何 4 位数字变体而不是两个 'hardcoded' 值,请使用

'.*/afr_[0-9]{4}_[0-9]*\.wav'

使用-name,你只能用通配符模式搜索,你需要-regex

使用 -regextype posix-egrep,您可以使用交替和未转义的捕获括号。 [0-9]* 匹配任何零个或多个数字(将 * 替换为 + 以匹配一个或多个)。

添加 .*/ 是因为正则表达式应匹配整个路径字符串。