Cómo usar regex en el archivo find

Intenté encontrar todos los archivos con fecha y todos los archivos hace 3 días o más.

find /home/test -name 'test.log.\d{4}-d{2}-d{2}.zip' -mtime 3 

No está enumerando nada. ¿Qué tiene de malo?

 find /home/test -regextype posix-extended -regex '^.*test\.log\.[0-9]{4}-[0-9]{2}-[0-9]{2}\.zip' -mtime +3 
  1. -name usa expresiones globulares , también conocidas como comodines. Lo que quieres es -regex
  2. Para utilizar los intervalos como lo desea, debe indicarle a find para que use Expresiones regulares extendidas mediante la -regextype posix-extended flag
  3. Necesitas escapar de los períodos porque en expresiones regulares un período tiene el significado especial de cualquier carácter individual . Lo que quieres es un período literal denotado por \.
  4. Para hacer coincidir solo aquellos archivos que tienen más de 3 días de antigüedad, necesita -mtime +3 un prefijo + como en -mtime +3 .

Prueba de concepto

 $ find . -regextype posix-extended -regex '^.*test\.log\.[0-9]{4}-[0-9]{2}-[0-9]{2}\.zip' ./test.log.1234-12-12.zip 

Utilice -regex no -name, y tenga en cuenta que la expresión regular coincide con lo que encontraría imprimir, por ejemplo, “/home/test/test.log” no “test.log”

Empezar con:

 find . -name '*.log.*.zip' -a -mtime +1 

Es posible que no necesite una expresión regular, intente:

  find . -name '*.log.*-*-*.zip' -a -mtime +1 

Querrá el +1 para que coincida con 1, 2, 3 …

Usar -regex :

Desde la página man:

 -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'. 

Además, no creo que find compatible con las extensiones de expresiones regulares, como \d . Necesita usar [0-9] .

 find . -regex '.*test\.log\.[0-9][0-9][0-9][0-9]-[0-9][0-9]-[0-9][0-9]\.zip' 

Solo una pequeña elaboración de expresiones regulares para buscar un directorio y archivo

Encuentra un directroy con un nombre como libro

 find . -name "*book*" -type d 

Encuentra un archivo con nombre como palabra de libro

 find . -name "*book*" -type f