Ayuda para el comando de búsqueda de Unix

Ayuda para el comando de búsqueda de Unix

Hola, ¿alguien puede ayudarme con la siguiente línea;

find . \( -type d ! -name . -prune \) -o -type f -name "*Log*"

Básicamente, debería encontrar directorios donde estén presentes los archivos con "Registro" en su nombre.

Tengo una estructura como esta:

/logs
  |
  |
  ----folder1
  |       |
  |       |
  |       ---App1LogDate.txt
  |
  ----folder2
  |      |
  |      |
  |      ---App2LogDate.txt
  |
  |
  |--App3LogDate.txt
  |
  |--App4LogDate.txt

Entonces, dado que ejecutaré esta línea dentro del directorio /logs, debería obtener los siguientes resultados:

.
./folder1
./folder2

3 directorios en total.

Respuesta1

Ligeramente a la izquierda, pero según la descripción anterior, lo siguiente debería hacer exactamente lo que desea:

find . -type f -name "*Log*" -print | sed -E 's/\/[^\/]+$//' | sort | uniq

Respuesta2

find . -name *.Log -print 

Esto le dará la ruta completa de todos los archivos cuyo nombre termine en Log.

Respuesta3

encontrar . ( -escriba d ! -nombre . -prune ) -o -escriba d -nombre "Registro"

tmp$ ls
App3LogDate.txt  App4LogDate.txt  folder1  folder2
tmp$ ls folder*
folder1:
App1LogDate.txt

folder2:
App2LogDate.txt
tmp$ find . \( -type d ! -name . -prune \) -o -type d -name "*Log*"
./folder2
./folder1
tmp$

Respuesta4

Si tienes GNU find (como lo hacen Linux y muchos otros Unixes modernos), puedes usar el increíble operador printf y hacer esto:

find -type f -name '*Log*' -printf '%h\n'

Probablemente también quieras canalizarlo a través de a sort -u(o a través de sort | uniq, según corresponda). Tenga en cuenta que algunas implementaciones comerciales de UNIX lo tendrán instalado como gfind (o tendrán un paquete que lo instale como tal).

información relacionada