1 votos

Terminal: Agregar lógica para ' encontrar ' directorios que contienen ya sea A [criterios] o [B]

He heredado un gran archivo de medios sin unificación de un esquema organizativo. Su contenido se remontan al menos 10 años. Me han pedido que encontrar una aguja en esta pila de heno, y tengo algunas hipótesis en cuanto a que la aguja del nombre. Pero no sé su nombre por cierto. Quiero usar una sola find comando en la Terminal para buscar nombres alternativos. Y quiero incluir un segundo conjunto: posibles extensiones de archivo. En pseudocódigo, aquí es lo que quiero decir: find [in a given directory] [files and folders whose name matches (*guess1* OR *guess2*) AND whose name matches (*.extension1 OR *.extension2)]. ¿Cómo debo expresar esto en el Terminal?

3voto

Ben Puntos 71

Usted puede hacer esto usando ls y grep con expresiones regulares

ls | grep -E "(guess1|guess2)(\.extension1|\.extension2)"

O si usted necesita recursiva ir en carpetas:

ls -R | grep -E "(guess1|guess2)(\.extension1|\.extension2)"

2voto

200_success Puntos 319

Utilice el comando

find /dir/to/search \( -iname '*guess1*' -o -iname '*guess2*' \) \
                    \( -iname '*.extension1' -o -iname '*.extension2' \)

find trabaja de forma recursiva. Uso -maxdepth 1 hacer es no recursivo.

-iname hace un insensible a mayúsculas-nombre de archivo que coincida.

Los argumentos son implícitamente unido por Y, pero se puede usar -o O. Los paréntesis tienen que ser escapado con una barra diagonal inversa para protegerlos de la shell.

(Puede ser escrita en una sola línea; aquí he roto las líneas de usar \retorno para la lectura).

1voto

Scott Leadley Puntos 111

findes lento. grepy otras herramientas de búsqueda de texto están mucho más rápidos. A menos que crees que vas a encontrar la aguja en el pajar con el primer tiro, usted está probablemente mejor haciendo un find en un archivo temporal, por ejemplo find . -print > /tmp/find.out y luego busca en ese archivo para nombres de archivo que cumplen Tu criterio de búsqueda.

1voto

200_success Puntos 319

Si el volumen está indizado por foco, utilice mdfind para resultados más rápidos.

mdfind -onlyin /dir/to/search '(kMDItemFSName==*guess1* || kMDItemFSName==*guess2*)' \
                     '&& (kMDItemFSName=*.extension1 || kMDItemFSName=*.extension2)'

AppleAyuda.com

AppleAyuda es una comunidad de usuarios de los productos de Apple en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X