Existe-t-il un moyen de limiter la profondeur d'une liste de fichiers récursive sous Linux?
La commande que j'utilise actuellement est la suivante:
ls -laR > dirlist.txt
Mais j'ai environ 200 répertoires et chacun d'entre eux ont 10 répertoires. Cela va donc prendre beaucoup trop de temps et accumuler trop de ressources système.
Tout ce qui m'intéresse vraiment, ce sont les informations sur la propriété et les autorisations pour les sous-répertoires du premier niveau:
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
MODIFIER:
Choix final de la commande:
find -maxdepth 2 -type d -ls >dirlist
Extraire le drapeau -maxdepth
de find
find . -maxdepth 1 -type d -exec ls -ld "{}" \;
Ici, j'ai utilisé 1 comme profondeur de niveau maximum, -type d
signifie rechercher uniquement les répertoires, qui ensuite ls -ld
répertorie le contenu de, au format long.
find
Il n'y a en fait aucun exec de /bin/ls
nécessaire;
Find a une option qui ne fait que ça:
find . -maxdepth 2 -type d -ls
Pour afficher uniquement le niveau de sous-répertoires qui vous intéresse, ajoutez -mindepth
au même niveau que -maxdepth
:
find . -mindepth 2 -maxdepth 2 -type d -ls
Lorsque les détails affichés doivent être différents, -printf
peut afficher tous les détails d'un fichier au format personnalisé. Pour afficher les autorisations symboliques et le nom du propriétaire du fichier, utilisez -printf
avec %M
et %u
dans format
.
J'ai remarqué plus tard que vous voulez les informations de propriété complètes, qui incluent le groupe. Utilisez %g
dans le format du nom symbolique, ou %G
pour l'identifiant du groupe (comme aussi %U
pour l'identifiant numérique)
find . -mindepth 2 -maxdepth 2 -type d -printf '%M %u %g %p\n'
Cela devrait vous donner juste les détails dont vous avez besoin, pour les bons fichiers.
Je vais donner un exemple montrant différentes valeurs pour l'utilisateur et le groupe:
$ 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
(Édité pour plus de lisibilité: en retrait, dernière ligne raccourcie)
Bien que le temps d'exécution ne soit généralement pas pertinent pour ce type de commande, l'augmentation des performances est ici suffisamment importante pour que cela vaille la peine d'être signalé:
Non seulement nous sauvegardons en créant un nouveau processus pour chaque nom - une tâche énorme - mais il n’est même pas nécessaire de lire l’information, car find
le sait déjà.
tree -L 2 -u -g -p -d
Imprime l’arborescence dans un joli format jusqu’à la profondeur 2 (-L 2). Imprimer utilisateur (-u) et groupe (-g) et autorisations (-p). Imprimer uniquement les répertoires (-d). l'arbre a beaucoup d'autres options utiles.