He intentado crear una cadena de comando de búsqueda que encuentre todos los archivos que terminan con un número del 1 al 99 pero excluye a todos los demás. .

p. ej. Quiero encontrar myfile1 myfile99 pero no myfile456 y no myfilebackup

La expresión regular en la que estoy pensando es myfile[1-9]{1,2} pero no puedo hacer que esto funcione con find.

find . -regex ".*myfile[0-9]{1,2}" O find . -iname "myfile[0-9]{1,2}"

Por lo que puedo ver, es la {1,2} la parte que no funciona.

(por cierto ¿Puedes usar -name -regex de manera intercambiable?)

Se agradece cualquier ayuda.

Comentarios

  • -iname (y -name) usan globs , que hacen no tiene esta sintaxis.

Respuesta

Puede intentar

find . -regex ".*myfile[0-9][0-9]?" 

o

find . \( -name "myfile[0-9][0-9]" -o -name "myfile[0-9]" \) 

Comentarios

  • Gracias, la primera línea es trabajo ng para mí. Intenté esto con -iname pero no ' creo que admita la sintaxis o de lo contrario ' estoy haciendo algo mal.

Respuesta

Si tiene GNU find, puede usar otro tipo de expresión regular:

find . -regextype sed -regex ".*myfile[0-9]\{1,2\}" 

Según GNU, find utiliza un castrado Sintaxis de expresión regular de Emacs de forma predeterminada: Emacs admite la sintaxis \{from,to\}, pero al menos GNU find no lo admite.

Curiosamente, el manual de referencia no incluye una sección sobre la sed sintaxis de expresiones regulares, así que quién sabe qué partes de él son compatibles.

Comentarios

  • sed como ed parece ser un alias para posix-basic, por lo que debería ser compatible con POSIX BRE (aunque admite algunos ex tensiones como \+). ' no es compatible con GNU sed donde, por ejemplo, [\n] coincide con una nueva línea en lugar de la barra invertida o n requerida por POSIX. Consulte también -regextype posix-extended para POSIX ERE (por lo que .*myfile[0-9]{1,2}), también con extensiones como \s o \<
  • Nunca supe sobre -regextype. Parece que si usa -regextype egrep parece que puede evitar las barras invertidas.

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *