Bien sûr.
$1 est le premier argument passé au script. On le met entre guillemets au cas ou il contiendrait des espaces (il serait alors interprété par find comme plusieurs noms de fichiers distincts).
Le résultat de cette commande vas être une liste de noms de fichiers (un par ligne). Pour te faire une idée de la sortie, tape “find Desktop” par exemple.
Ensuite on va faire une action sur chacun des noms de fichiers renvoyés par find. Cette action est bien sûr de le renommer en remplaçant les espaces par des underscores.
Imaginons que l’on traite une seule ligne renvoyée par find.
On cherche à exécuter la commande :
On utilise l’option -T pour que mv ne traite pas les répertoires de manière spéciale.
Pour obtenir le nouveau nom du fichier, on utilise sed :
Ensuite il faut savoir que les backquotes (``) permettent de créer une commande à partir du résultat d’une autre commande. Par exemple :
ma_variable=`uname -s`
echo $ma_variable
Linux
Ca permet de stocker le résultat d’une commande dans une variable. Ceci ne fonctionne pas du tout :
ma_variable=uname -s
bash: -s : commande introuvable
Enfin la commande interne read permet de lire une ligne de l’entrée standard (stdin). Elle stocke le résultat dans son premier argument.
Essayes
read ma_variable
echo $ma_variable
La commande read renvoie VRAI si elle a pu lire quelque chose, FAUX sinon. C’est ce qui permet à la boucle while de terminer.
Je viens de me rendre compte d’un problème avec mon script : si c’est un nom de répertoire qui contient des espaces, ce répertoire va être renommé et ça provoquer des erreurs avec les appels à mv qui suivent. Si les noms de répertoires ne contiennent pas d’espaces ça ne pose pas de problèmes.
Je te corrige ça après mangé.