varios una todos script recursivos recursivo recursiva permisos para los comando carpeta busqueda borrar archivos linux bash

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.