Tengo algunas imágenes nombradas con la cadena uuid1 generada. Por ejemplo 81397018-b84a-11e0-9d2a-001b77dc0bed.jpg. Quiero encontrar todas estas imágenes usando el comando "buscar":
find . -regex "[a-f0-9\-]\{36\}\.jpg".
Pero no funciona. Algo mal con la expresión regular? ¿Podría alguien ayudarme con esto?
Respuestas:
Tenga en cuenta que debe especificar
.*/
al principio porquefind
coincide con la ruta completa.Ejemplo:
Mi versión de find:
fuente
"^ ... $"
expresión implícita alrededor de la expresión regular. Debe coincidir con la línea de resultados ENTERA./
de.*/
porque.*
concuerda con cero o más de (casi) cualquier carácter.\{36\}
valid types are 'findutils-default', 'awk', ' egrep', 'ed', 'emacs', 'gnu-awk', 'grep', 'posix-awk', 'posix-basic', 'posix-egrep', 'posix -extended', 'posix-minimal-basic', 'sed'.
-regextype
bandera antes de la-regex
bandera, de lo contrario no se aplica.La
-regex
expresión de búsqueda coincide con el nombre completo , incluida la ruta relativa desde el directorio actual. Parafind .
esto siempre comienza con./
, luego cualquier directorio.Además, estas son
emacs
expresiones regulares, que tienen otras reglas de escape que las expresiones regulares egrep habituales.Si todos estos están directamente en el directorio actual, entonces
Deberia trabajar. (No estoy realmente seguro, no puedo hacer que la repetición contada funcione aquí). Puede cambiar a expresiones egrep de la siguiente manera
-regextype posix-egrep
:(Tenga en cuenta que todo lo que se dice aquí es para GNU find, no sé nada sobre el BSD, que también es el predeterminado en Mac).
fuente
posix-egrep
tipo funcionó para mí.-regextype
es una opción para GNUfind
y no para BSD (al menos no como Mac BSD)find
. Si esta opción no está disponible, asegúrese de instalar GNU find. Si en una Mac eso es posible con el paquete de caféfindutils
. Buscar está entonces disponible a través degfind
.A juzgar por otras respuestas, parece que esto podría ser culpa de encontrar.
Sin embargo, puedes hacerlo de esta manera:
find . * | grep -P "[a-f0-9\-]{36}\.jpg"
Puede que tenga que ajustar un poco el grep y usar diferentes opciones dependiendo de lo que desee, pero funciona.
fuente
find
la-prune
funcionalidad de que omitirá ciertos directorios por completo. Muy a menudo esto no es realmente importante, pero vale la pena mencionarlo.en Mac OS X (BSD find) : igual que la respuesta aceptada, el
.*/
prefijo es necesario para que coincida con una ruta completa:man find
dice-E
utiliza soporte extendido regexfuente
-E
que no está disponible en Ubuntu (probado en WSL Ubuntu)Intente usar comillas simples (') para evitar que el shell se escape de su cadena. Recuerde que la expresión debe coincidir con la ruta completa, es decir, debe verse así:
Aparte de eso, parece que mi hallazgo (GNU 4.4.2) solo conoce expresiones regulares básicas, especialmente no la sintaxis {36}. Creo que tendrás que arreglártelas sin eso.
fuente
De manera simple: puede especificar. * Al principio porque find coincide con toda la ruta.
encontrar versión
fuente
Debe usar la ruta absoluta del directorio al aplicar la instrucción de búsqueda con expresión regular. En su ejemplo, el
debe ser cambiado a
En la mayoría de los sistemas Linux, ese sistema no puede reconocer algunas disciplinas de expresión regular, por lo que debe señalar explícitamente -regexty como
fuente