1 votos

¿Cómo utilizar el comando find de forma que coincida con el directorio más interno?

Digamos que tengo el siguiente archivo

this/is/my/file.txt

¿Puedo buscar este archivo dado que sólo sé que el archivo está en /my/ directorio ?

1voto

bertieb Puntos 2409

¿Cómo puedo find un archivo en el directorio más interno?

Puede utilizar find para buscar un archivo específico ( file.txt ), y se hará una búsqueda por usted (según las opciones especificadas). Pero ¿qué pasa si tienes dos file.txt s, y sólo quieren coincidir con un ¿para usarla en un script? Introduzca awk , sort , head y cut :

find /my/ -type f -name file.txt | awk -F/ '{ print NF-1, $0 }' | sort -nr | head -n1 | cut -d " " -f2

Esto devolverá un resultado: el más profundo coincidencia - o ninguna.

Explicación

  • find en /my/ todos los archivos regulares ( -type f ) -name d file.txt

  • pasar a awk y hacer que cuente el número de directorios (profundidad) estableciendo el separador de campos como / ( -F/ ), y anteponiendo eso al resultado ( print NF-1, $0 )

  • sort que numéricamente, descendiendo desde el mayor (es decir, la mayoría de los directorios) primero

  • sólo tienen un resultado ( head -n1 )

  • quitar el recuento de la profundidad ( cut -d " " -f2 )

Puede haber una forma más corta de hacerlo, pero esto devolverá el resultado más profundo. Supone que las barras inclinadas / para la demarcación del directorio, pero creo que podemos permitirlo. Probado en GNU bash, version 4.3.30(1)-release (y GNU bash, version 3.2.53(1)-release en OSX), y no depende demasiado de los GNUismos.

EnMiMaquinaFunciona.com

EnMiMaquinaFunciona es una comunidad de administradores de sistemas en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros sysadmin, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X