una - script para borrar archivos en linux
¿Cómo limitar la profundidad para la lista de archivos recursivos? (3)
Hacer uso de las opciones de find
.
En realidad, no es necesario ningún ejecutivo de /bin/ls
;
Find tiene una opción que hace precisamente eso:
find . -maxdepth 2 -type d -ls
Para ver solo el nivel de subdirectorios que le interesa, agregue -mindepth
al mismo nivel que -maxdepth
:
find . -mindepth 2 -maxdepth 2 -type d -ls
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 el format
.
Más tarde, me di cuenta de que desea la información de propiedad completa, que incluye el grupo. Use %g
en el formato para el nombre simbólico, o %G
para el ID de grupo (como también %U
para el ID de usuario numérico)
find . -mindepth 2 -maxdepth 2 -type d -printf ''%M %u %g %p/n''
Esto debería darle solo los detalles que necesita, para los archivos correctos.
Daré un ejemplo que muestra valores realmente diferentes para usuario y grupo:
$ sudo find /tmp -mindepth 2 -maxdepth 2 -type d -printf ''%M %u %g %p/n''
drwx------ www-data www-data /tmp/user/33
drwx------ octopussy root /tmp/user/126
drwx------ root root /tmp/user/0
drwx------ siegel root /tmp/user/1000
drwxrwxrwt root root /tmp/systemd-[...].service-HRUQmm/tmp
(Editado para legibilidad: sangrado, acortada última línea)
Notas sobre el rendimiento.
Aunque el tiempo de ejecución es mayormente irrelevante para este tipo de comando, el aumento en el rendimiento es lo suficientemente grande aquí para que valga la pena señalarlo:
No solo ahorramos al crear un nuevo proceso para cada nombre, una tarea enorme , sino que la información ni siquiera necesita ser leída, ya que Find ya lo sabe.
¿Hay una manera de limitar la profundidad de un listado de archivos recursivos en linux?
El comando que estoy usando en este momento es:
ls -laR > dirlist.txt
Pero tengo unos 200 directorios y cada uno tiene 10 de directorios. Así que solo tomará demasiado tiempo y consumirá 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 del comando:
find -maxdepth 2 -type d -ls >dirlist
-maxdepth
un -maxdepth
bandera -maxdepth
de find
find . -maxdepth 1 -type d -exec ls -ld "{}" /;
Aquí utilicé 1 como nivel máximo de profundidad, -type d
significa buscar solo directorios, que luego ls -ld
muestra el contenido de, en formato largo.
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.