Bonjour,
Voici un script pourri qui appelle 60 000 fois la foncttion chmod :ane:
find /media/autres/ -type d -exec chmod 744 '{}' \;
find /media/audio_video/ -type d -exec chmod 744 '{}' \;
find /media/vmware/ -type d -exec chmod 744 '{}' \;
find /media/documents/ -type d -exec chmod 744 '{}' \;
find /media/gros_docs/ -type d -exec chmod 744 '{}' \;
find /media/autres/ -type f -exec chmod 644 '{}' \;
find /media/audio_video/ -type f -exec chmod 644 '{}' \;
find /media/vmware/ -type f -exec chmod 644 '{}' \;
find /media/documents/ -type f -exec chmod 644 '{}' \;
find /media/gros_docs/ -type f -exec chmod 644 '{}' \;
Comme l’améliorer ?
J’ai essayer
find /media/autres/ -type f | xargs -n 500 chmod 644
Mais j’ai des fichiers et dossiers avec espaces donc ça ne fonctionne pas…
Y a une option pour find pour qu’il sépare les résultats par des \0 au lieu de retours chariot, et une pour xargs pour qu’il utilise \0 comme sépérateur de résultats au lieu des retours.
Cf. man
#!/bin/bash
echo 'Application des droits en cours...'
chown fabrice.fabrice -R /media/autres/ /media/audio_video/ /media/vmware/ /media/documents/ /media/gros_docs/ /var/www/
find /media/vmware/ -print0 -type f | xargs -0 -n 1000 chmod 644
find /media/vmware/ -print0 -type d | xargs -0 -n 1000 chmod 744
find /media/documents/ -print0 -type f | xargs -0 -n 1000 chmod 644
find /media/documents/ -print0 -type d | xargs -0 -n 1000 chmod 744
find /media/audio_video/ -print0 -type f | xargs -0 -n 1000 chmod 644
find /media/audio_video/ -print0 -type d | xargs -0 -n 1000 chmod 744
find /media/gros_docs/ -print0 -type f | xargs -0 -n 1000 chmod 644
find /media/gros_docs/ -print0 -type d | xargs -0 -n 1000 chmod 744
find /media/autres/ -print0 -type f | xargs -0 -n 1000 chmod 644
find /media/autres/ -print0 -type d | xargs -0 -n 1000 chmod 744
chmod 744 -R /media/documents/scripts/
chmod 755 -R /var/www/
Voilà qui est beaucoup mieux.
En relisant le man de xargs j’ai vu
Cette page de manuel documente la version GNU de xargs. xargs lit des éléments délimités par des blancs (pouvant être protégés par des apostrophes, des guillemets ou un backslash) ou par des sauts de ligne depuis lentrée standard, et exécute une ou plusieurs fois la commande (/bin/echo par défaut) en utilisant les paramètres_initiaux suivis des arguments lus depuis lentrée standard. Les lignes blanches en entrée sont ignorées.
Parce que les noms de fichiers Unix peuvent comporter des blancs et des caractères de saut de ligne, ce comportement par défaut pose souvent des problèmes ; les noms de fichiers qui comportent des blancs et/ou des caractères de saut de ligne sont traités de manière incorrecte par xargs.
Dans ces situations, il est préférable dutiliser loption « -O » qui permet déviter ce genre de problèmes. Lorsque lon utilise cette option, il faut sassurer que le programme qui produit lentrée pour xargs utilise aussi un caractère null comme séparateur. Si ce programme est GNU find par exemple, loption « -print0 » le fera pour vous.
Si lappel de la commande se termine avec un code détat 255, xargs sarrêtera immédiatement sans lire davantage les paramètres dentrée. Si cela se produit, un message derreur est émis vers la sortie derreur standard stderr.
Je rêve, la réponse est devant mon nez mais je l’avais même pas vu. :ane:
Merci.