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).