GNU/Linux >> Tutoriales Linux >  >> Linux

¿Cómo usar expresiones regulares con el comando de búsqueda?

find . -regextype sed -regex ".*/[a-f0-9\-]\{36\}\.jpg"

Tenga en cuenta que debe especificar .*/ al principio porque find coincide con toda la ruta.

Ejemplo:

[email protected]:~/so$ find . -name "*.jpg"
./foo-111.jpg
./test/81397018-b84a-11e0-9d2a-001b77dc0bed.jpg
./81397018-b84a-11e0-9d2a-001b77dc0bed.jpg
[email protected]:~/so$ 
[email protected]:~/so$ find . -regextype sed -regex ".*/[a-f0-9\-]\{36\}\.jpg"
./test/81397018-b84a-11e0-9d2a-001b77dc0bed.jpg
./81397018-b84a-11e0-9d2a-001b77dc0bed.jpg

Mi versión de encontrar:

$ find --version
find (GNU findutils) 4.4.2
Copyright (C) 2007 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.

Written by Eric B. Decker, James Youngman, and Kevin Dalley.
Built using GNU gnulib version e5573b1bad88bfabcda181b9e0125fb0c52b7d3b
Features enabled: D_TYPE O_NOFOLLOW(enabled) LEAF_OPTIMISATION FTS() CBO(level=0) 
[email protected]:~/so$ 
[email protected]:~/so$ find . -regextype foo -regex ".*/[a-f0-9\-]\{36\}\.jpg"
find: Unknown regular expression type `foo'; valid types are `findutils-default', `awk', `egrep', `ed', `emacs', `gnu-awk', `grep', `posix-awk', `posix-basic', `posix-egrep', `posix-extended', `posix-minimal-basic', `sed'.

El -regex buscar expresión coincide con el nombre completo , incluida la ruta relativa desde el directorio actual. Para find . esto siempre comienza con ./ , luego cualquier directorio.

Además, estos son emacs expresiones regulares, que tienen otras reglas de escape además de las expresiones regulares egrep habituales.

Si estos están todos directamente en el directorio actual, entonces

find . -regex '\./[a-f0-9\-]\{36\}\.jpg'

Deberia trabajar. (No estoy muy seguro, no puedo hacer que la repetición contada funcione aquí). Puede cambiar a expresiones egrep por -regextype posix-egrep :

find . -regextype posix-egrep -regex '\./[a-f0-9\-]{36}\.jpg'

(Tenga en cuenta que todo lo que se dice aquí es para la búsqueda de GNU, no sé nada sobre el BSD, que también es el predeterminado en Mac).


A juzgar por otras respuestas, parece que esto podría ser culpa de find.

Sin embargo, puedes hacerlo de esta manera:

find . * | grep -P "[a-f0-9\-]{36}\.jpg"

Es posible que deba modificar un poco el grep y usar diferentes opciones según lo que desee, pero funciona.


Linux
  1. Cómo usar el comando ethtool con ejemplos

  2. Cómo usar el comando Grep para buscar texto en archivos

  3. Cómo usar el comando Su en Linux

  4. Cómo auditar permisos con el comando de búsqueda

  5. Cómo usar el comando `subproceso` con tuberías

Cómo usar el comando RPM (con ejemplos)

Cómo usar el comando rm de Linux con ejemplos

Cómo encontrar archivos con el comando fd en Linux

Cómo usar el comando PS

Cómo usar el comando SUPERIOR

Cómo usar el comando de apagado con ejemplos