¿Hay alguna manera de limitar la profundidad de una lista recursiva de archivos en Linux?
El comando que estoy usando en este momento es:
ls -laR > dirlist.txtPero tengo alrededor de 200 directorios y cada uno de ellos tiene 10 de directorios. Por lo tanto, llevará demasiado tiempo y acaparará demasiados recursos del sistema.
Todo lo que realmente me interesa es la información de propiedad y permisos para los subdirectorios de primer nivel:
drwxr-xr-x 14 root   root  1234 Dec 22 13:19 /var/www/vhosts/domain1.co.uk  
drwxr--r-- 14 jon    root  1234 Dec 22 13:19 /var/www/vhosts/domain1.co.uk/htdocs  
drwxr--r-- 14 jon    root  1234 Dec 22 13:19 /var/www/vhosts/domain1.co.uk/cgi-bin  
drwxr-xr-x 14 root   root  1234 Dec 22 13:19 /var/www/vhosts/domain2.co.uk  
drwxr-xrwx 14 proftp root  1234 Dec 22 13:19 /var/www/vhosts/domain2.co.uk/htdocs  
drwxr-xrwx 14 proftp root  1234 Dec 22 13:19 /var/www/vhosts/domain2.co.uk/cgi-bin  
drwxr-xr-x 14 root   root  1234 Dec 22 13:19 /var/www/vhosts/domain3.co.uk  
drwxr-xr-- 14 jon    root  1234 Dec 22 13:19 /var/www/vhosts/domain3.co.uk/htdocs  
drwxr-xr-- 14 jon    root  1234 Dec 22 13:19 /var/www/vhosts/domain3.co.uk/cgi-bin  
drwxr-xr-x 14 root   root  1234 Dec 22 13:19 /var/www/vhosts/domain4.co.uk  
drwxr-xr-- 14 jon    root  1234 Dec 22 13:19 /var/www/vhosts/domain4.co.uk/htdocs
drwxr-xr-- 14 jon    root  1234 Dec 22 13:19 /var/www/vhosts/domain4.co.uk/cgi-binEDITAR:
Elección final de comando:
find -maxdepth 2 -type d -ls >dirlist
ls -la /var/www/vhosts/*?Respuestas:
Echa un vistazo a la
-maxdepthbandera defindAquí utilicé 1 como profundidad de nivel máxima,
-type dsignifica buscar solo directorios, que luegols -ldenumera los contenidos de, en formato largo.fuente
-dopción als.findparte para resolver su problema principal. De todos modos, gracias, lo estoy agregando.-print0yxargs -0mucho. Ejemplo:find . -maxdepth 1 -type d -print0 | xargs -0 ls -dHacer uso de
findlas opciones deEn realidad no hay un ejecutivo de
/bin/lsnecesario;Find tiene una opción que hace exactamente eso:
Para ver solo el nivel de subdirectorios que le interesa, agregue
-mindepthal mismo nivel que-maxdepth:Usar formato de salida
Cuando los detalles que se muestran deben ser diferentes,
-printfpuede mostrar cualquier detalle sobre un archivo en formato personalizado; Para mostrar los permisos simbólicos y el nombre del propietario del archivo, use-printfcon%My%uen elformat.Más tarde noté que desea la información de propiedad completa, que incluye el grupo. Úselo
%gen el formato para el nombre simbólico o%Gpara la identificación del grupo (como también%Upara la identificación numérica del usuario)Esto debería darle los detalles que necesita, para los archivos correctos.
Daré un ejemplo que muestra valores realmente diferentes para el usuario y el grupo:
(Editado para facilitar la lectura: sangría, última línea acortada)
Notas sobre rendimiento
Aunque el tiempo de ejecución es principalmente irrelevante para este tipo de comando, el aumento en el rendimiento es lo suficientemente grande aquí como para que valga la pena señalarlo:
No solo ahorramos creando un nuevo proceso para cada nombre, una tarea enorme , sino que la información ni siquiera necesita leerse, como
findya lo sabemos.fuente
tree -L 2 -u -g -p -dImprime el árbol de directorios en un formato bonito hasta la profundidad 2 (-L 2). Imprimir usuario (-u) y grupo (-g) y permisos (-p). Imprimir solo directorios (-d). El árbol tiene muchas otras opciones útiles.
fuente
tree -L 2 xxx/otree -L 2 -d xxx/es suficiente para algún caso.Encontré una solución fácil mientras jugaba mi pez, que se adapta perfectamente a tus necesidades.
o
fuente