|
|
|
|
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,
Configuration: Linux Konqueror 3.5
Salut,
lami20j@deb:~/trash/fic$ ls -1 aaa bbb ddd eee ddd eee kdjf ddd eee kdjf lsdkjfklsd ddd eee kdjf lsdkjfklsd dfj lami20j@deb:~/trash/fic$ rename 's/\s+/_/g' * lami20j@deb:~/trash/fic$ ls -1 aaa_bbb ddd_eee ddd_eee_kdjf_ ddd_eee_kdjf_lsdkjfklsd_ _ddd_eee_kdjf_lsdkjfklsd_dfj_ lami20j@deb:~/trash/fic$lami20j |
Salut lami20j,
|
Bon, awk je n'ai pas fait (ça me suffit perl :-))
:~/trash/fic$ ls -1 aaa bbb ddd eee ddd eee kdjf ddd eee kdjf lsdkjfklsd ddd eee kdjf lsdkjfklsd dfj :~/trash/fic$ IFS="\n";for i in *;do mv $i $(echo $i | sed -r 's/\s+/_/g');done :~/trash/fic$ ls -1 aaa_bbb ddd_eee ddd_eee_kdjf_ ddd_eee_kdjf_lsdkjfklsd_ _ddd_eee_kdjf_lsdkjfklsd_dfj_ lami20j@deb:~/trash/fic$lami20j |
Ok, et voilà une version awk
$ ls -1
aaa bbb
ddd eee
ddd eee kdjf
ddd eee kdjf lsdkjfklsd
ddd eee kdjf lsdkjfklsd dfj
$ IFS="\n";for i in *;do mv $i $(echo $i | awk '{ gsub(/ /, "_");print}');done
$ ls -1
aaa_bbb
ddd_eee
ddd_eee_kdjf_
ddd_eee_kdjf_lsdkjfklsd_
___ddd_eee_kdjf_lsdkjfklsd__dfj__
$
lami20j |
Salut,
[tmpfs]$ var="Mon fichier avec plein d'espaces"
[tmpfs]$ echo $var
Mon fichier avec plein d'espaces
[tmpfs]$ echo ${var// /_}
Mon_fichier_avec_plein_d'espaces
[tmpfs]$Donc en adaptant :#! /bin/bash
rep="/media/sda5/Informatique/Linux/Test"
cd $rep
for file in * ; do
mv -T "$file" ${file// /_}
done ;-))
Z'@+...che. JP : Zen, my Nuggets ! ;-) Le savoir n'est bon que s'il est partagé. |
Salut,
|
Re-
|
Répondre à tifo85
|