Bonjour,
J'essaie d'écrire un script qui a pour but d'éliminer les espacements dans les noms de fichiers pour les remplacer par des traits soulignés ('underscore') mais je n'y arrive pas. Je crois que je ne suis pas très loin du but.
J'ai essaye deux facons differentes.
Première façon
#! /bin/bash
rep="/media/sda5/Informatique/Linux/Test"
cd $rep
for file in * ; do
mv -T "$file" ${file/ /_}
done
Ce programme marche avec des fichiers qui ont un espacement mais ca ne fonctionne pas avec ceux qui ont deux espacements et plus.
Deuxième façon
#! /bin/bash
rep="/media/sda5/Informatique/Linux/Test"
cd $rep
for file in * *; do
ls $rep | awk '{ gsub(/ /,"_") ; a=$7$8$9 ; print $a ; export $a}';
mv -T "$file" $a
done
Si vous exécutez ce deuxieme script, vous constaterez que les espacements sont bel et bien remplacés par des soulignés et qu'ils s'affichent à l'écran MAIS TOUT ÇA L'INTÉRIEUR DE awk. Ce programme affiche à l'écran les noms de fichiers de la bonne facon mais ne corrige pas les noms dans le répertoire.
Le problème survient lorsque je fais la commande mv -T "$file" $a, le shell ne voit pas la valeur du deuxième fichier soit $a. La valeur de $a reste à l'intérieur de la commande awk. Mais comment sortir la variable $a de awk ... c'est ça mon problème. Ça m'amène à poser une question plus générale.
Comment fait on pour assigner à une variable du shell le résultat d'une commande effectué par awk?
Merci,
