3

我有一个可以在 Javascript 中工作的正则表达式,但不适用于 Linux find 命令。目的是收集过去 90 天内已更新的文件列表,不包括特定目录(例如,假设我想包含目录/data/safe/23/test,但不包含/data/safe/23/skip1)。这是正则表达式:

^/data/safe/\d{1,4}/(?:(?!skip1|skip2).*)

这是 find 命令(注意我使用的是 posix-extended;这可能是问题所在):

find /data/safe -regextype posix-extended -regex '^/data/safe/\d{1,4}/(?:(?!skip1|skip2).*)' -mtime -90

最后这是生成的错误:

find: Invalid preceding regular expression

任何帮助是极大的赞赏!

4

2 回答 2

2

我认为 posix-extended 不支持“?:”和“?!”。

无论如何,使用 find 会更容易使用类似的东西:

find /data/safe -regextype posix-extended -regex '^/data/safe/[0-9]{1,4}/.*' ! -regex '^/data/safe/[0-9]{1,4}/(skip1|skip2).*' -mtime -90
于 2012-05-23T18:20:08.547 回答
1

你这样做是错的。您需要用星号替换大括号。此外,您应该通过 tar 或 touch 命令来传递整个内容。

于 2012-05-23T18:15:47.223 回答