Qui n’a jamais eu de problème, en utilisant récursivement des fonctions comme chmod ou chown, lorsque les noms de fichiers comprennent des espaces ?
Par exemple, je crée un dossier et un fichier, dont le nom comprend un espace :
dr-xr-xr-x 2 1000 1000 4,0K oct. 10 14:47 test dossier -r--r--r-- 1 1000 1000 0 oct. 10 14:47 test fichier
La fonction suivante va buter sur ces derniers, et le fait savoir :
postit@cibles ~ $ find * -type d | xargs chmod 755 chmod: impossible d'accéder à 'test': Aucun fichier ou dossier de ce type chmod: impossible d'accéder à 'dossier': Aucun fichier ou dossier de ce type postit@cibles ~ $ find * -type f | xargs chmod 644 chmod: impossible d'accéder à 'test': Aucun fichier ou dossier de ce type chmod: impossible d'accéder à 'fichier': Aucun fichier ou dossier de ce type
Le script va essayer de modifier les droits de « test », « dossier », « test » et « fichier », considérant les espaces comme des séparations entre noms de fichiers.
Pour régler le problème, on utilisera donc la fonction suivante :
find * -type d -exec chmod 755 {} \;
find * -type f -exec chmod 644 {} \;
Et ça marche aussi avec chown :
find * -exec chown titi:toto {} \;
Aucun commentaire
Soyez le premier à commenter :)