1

我有这样命名的文件名......

[phone_number]_[email]_[milliseconds].mp4

所以:

2125551212_foo@blah.com_1378447385902.mp4

find采用正则表达式模式(据说)来查找以 10 位数字开头并以如下结尾的文件mp4

find ../media_pool -regex '^\d{10}.*mp4$'

然而,这根本没有回报。

当我这样尝试时: find ../media_pool -regex 'mp4$' 它返回所有以该扩展名结尾的文件......所以,它*看起来它适用于正则表达式的某些子集,但不是全部。

有人能指出我得到我需要的正确方法是什么吗?如果其他东西做得更好,我很高兴不使用 find 。

4

3 回答 3

1

我花了一段时间才弄清楚 find 匹配整个路径,所以你需要在开头使用“.*/”。以下是经过测试和工作的。

find . -regextype posix-extended -regex '.*/[0-9]{10}.*mp4$'
于 2013-09-06T17:35:14.847 回答
1

我不是 Linux 实用程序方面的专家,但您似乎可以指定用于匹配模式的正则表达式的类型,无论如何似乎\d不支持,请尝试以下操作:

find ../media_pool -regextype posix-extended -regex '^[0-9]{10}.*mp4$'

我不知道你是否需要引用posix-extended,那是你自己想办法。

编辑:对不起,还有另一个问题。您不需要更改引擎类型,默认情况下find使用Emacs引擎,我能够查看支持的语法。

find ../media_pool -regex '.*/[0-9]\{10\}.*mp4$'

关键是转义 { 和 } 例如。\{10\}并在开头添加 .*/ 以匹配 find 返回的完整路径。

于 2013-09-06T17:28:24.643 回答
0

The default regular expression engine for find is Emacs, you can change it to something else by using the -regextype option

Here is an example using sed:

find . -regextype sed -regex ".*/[0-9]\{10\}.*mp4$"

there are most likely other solutions since several engines are supported. Another important thing to note is the .*/ at the beginning of the regular expression, find matches the entire path of a file so this will catch that.

于 2013-09-06T17:37:53.703 回答