如何在文件查找中使用正则expression式
我试图在3天或更久之前查找所有文件的date和所有文件。
find /home/test -name 'test.log.\d{4}-d{2}-d{2}.zip' -mtime 3
它没有列出任何东西。 这是怎么回事?
find /home/test -regextype posix-extended -regex '^.*test\.log\.[0-9]{4}-[0-9]{2}-[0-9]{2}\.zip' -mtime +3
-
-name
使用球状expression式,又名通配符。 你想要的是 – 正则-regex
- 要按照您的意图使用区间,您需要通过
-regextype posix-extended
标志告诉find
使用扩展正则expression式 - 你需要逃避这段时间,因为在正则expression式中,一个时期有任何单个字符的特殊含义。 你想要的是一个由
\.
表示的文字时期\.
- 要仅匹配那些大于 3天的文件,您需要在数字前加上
+
如-mtime +3
。
概念validation
$ find . -regextype posix-extended -regex '^.*test\.log\.[0-9]{4}-[0-9]{2}-[0-9]{2}\.zip' ./test.log.1234-12-12.zip
使用-regex not -name,并且要知道正则expression式匹配什么查找会打印,例如“/home/test/test.log”而不是“test.log”
从…开始:
find . -name '*.log.*.zip' -a -mtime +1
你可能不需要一个正则expression式,试试:
find . -name '*.log.*-*-*.zip' -a -mtime +1
您将需要+ 1为了匹配1,2,3 …
使用-regex
:
从手册页:
-regex pattern File name matches regular expression pattern. This is a match on the whole path, not a search. For example, to match a file named './fubar3', you can use the regular expression '.*bar.' or '.*b.*3', but not 'b.*r3'.
另外,我不相信find
支持正则expression式扩展,比如\d
。 你需要使用[0-9]
。
find . -regex '.*test\.log\.[0-9][0-9][0-9][0-9]-[0-9][0-9]-[0-9][0-9]\.zip'
只是一小部分的正则expression式来search一个目录和文件
find像书名一样的directroy
find . -name "*book*" -type d
find一个名字像书一样的文件
find . -name "*book*" -type f