J'ai la commande suivante
find . -type f -print0 | xargs -0 chmod 644
qui passerait avec succès à 644 les autorisations sur tous les fichiers de., à condition que les noms de fichiers ne contiennent aucun espace incorporé. Cependant, cela ne fonctionne pas en général.
Par exemple
touch "hullo world"
chmod 777 "hullo*"
find . -type f -print0 | xargs -0 chmod 644
résultats
/bin/chmod: cannot access `./hello': No such file or directory
/bin/chmod: cannot access `world': No such file or directory
Existe-t-il un moyen de modifier la commande afin qu’elle puisse traiter les fichiers contenant des espaces incorporés?
Merci beaucoup pour tout conseil.
Sans xargs
find . -type f -exec chmod 644 {} \;
ou avec xargs
find . -type f -print0 | xargs -0 -I {} chmod 644 {}
les commutateurs xargs
utilisés
-0
S'il y a des espaces ou des caractères (y compris les nouvelles lignes), de nombreuses commandes ne fonctionneront pas. Cette option prend en charge les noms de fichiers avec un espace vide.
-I
Remplacez les occurrences de replace-str dans les arguments initiaux par des noms lus à partir de l'entrée standard. De plus, les espaces non cités ne terminent pas les éléments en entrée; au lieu de cela, le séparateur est le caractère de nouvelle ligne.
Explication prise de ici