如何在文件查找中使用正则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 
  1. -name使用球状expression式,又名通配符。 你想要的是 – 正则-regex
  2. 要按照您的意图使用区间,您需要通过-regextype posix-extended标志告诉find使用扩展正则expression式
  3. 你需要逃避这段时间,因为在正则expression式中,一个时期有任何单个字符的特殊含义。 你想要的是一个由\.表示的文字时期\.
  4. 要仅匹配那些大于 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