¿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.txt
Pero 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-bin
EDITAR:
Elección final de comando:
find -maxdepth 2 -type d -ls >dirlist
ls -la /var/www/vhosts/*
?Respuestas:
Echa un vistazo a la
-maxdepth
bandera defind
Aquí utilicé 1 como profundidad de nivel máxima,
-type d
significa buscar solo directorios, que luegols -ld
enumera los contenidos de, en formato largo.fuente
-d
opción als
.find
parte para resolver su problema principal. De todos modos, gracias, lo estoy agregando.-print0
yxargs -0
mucho. Ejemplo:find . -maxdepth 1 -type d -print0 | xargs -0 ls -d
Hacer uso de
find
las opciones deEn realidad no hay un ejecutivo de
/bin/ls
necesario;Find tiene una opción que hace exactamente eso:
Para ver solo el nivel de subdirectorios que le interesa, agregue
-mindepth
al mismo nivel que-maxdepth
:Usar formato de salida
Cuando los detalles que se muestran deben ser diferentes,
-printf
puede mostrar cualquier detalle sobre un archivo en formato personalizado; Para mostrar los permisos simbólicos y el nombre del propietario del archivo, use-printf
con%M
y%u
en elformat
.Más tarde noté que desea la información de propiedad completa, que incluye el grupo. Úselo
%g
en el formato para el nombre simbólico o%G
para la identificación del grupo (como también%U
para 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
find
ya lo sabemos.fuente
tree -L 2 -u -g -p -d
Imprime 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