Pages : 1
#1 Le 24/03/2008, à 14:06
- slhuilli
[BASH] Aide
Bonjour,
je voudrais monter un script (équivalent .bat dos) mais j'y connais absolument rien pour le moment. Mon but est d'apprendre un peu le shell et de comprendre, pour m'en resservir (faut bien commencer par un bout). Alors autant me faire un truc utile.
J'ai un répertoire bourré de fichiers qui ont tous la même structure de nom :
(theme) - (titre).extension, sans les parenthèses évidemment
Mon but étant de "classer" c'est a dire ranger les fichiers selon le thème (un répertoire par thème, le theme peut etre une chained e caractere avevc espaces, il est défiunit par tout ce qui précéde le premier tiret du nom de fichier)., sachant que ce répertoire a déjà pu être créé auparavant ou pas
Exemple
1. Je fais un ls, j'obtiens
theme - Mon fichier1.txt
mon theme2 - Mon fichier2.txt
dans le script, il faut que je vire les espaces (obligatoire) et que je les remplace par _
J'ai trouvé ca :
for i in *\ *; do
$source=echo $i |tr " " "_";
mv -T "$i" $source;
done
qui a l'air de marcher mais je sèche a partir de là !
2. j'obtiens donc :
theme_-_Mon_fichier1.txt
mon_theme2_-_Mon_fichier2.txt
il faudrait maintenant déplacer le fichier en fonction de ce qui est avant le premier tiret du nom de fichier (ici : theme_ , mon_theme2_) dans les répertoires theme, mon theme2, et, tant qu'a faire, remplacer cette fois ci les _ par " "pour que les noms de fichiers soient propres...
et là je sèche ....
Hors ligne
#2 Le 24/03/2008, à 15:29
- Alain.g
Re : [BASH] Aide
Salut
Je ne comprends pas pourquoi tu dis qu'il est obligatoire de supprimer les espaces puisque à la fin tu veux les remettre ?
Si tu crains que ça pose problème de le script, il n'y aura pas de problème du moment que tu utilises bien les guillemets.
Pour ce que tu souhaites, il y a toutes les informations ici : http://abs.traduc.org/abs-4.2.01-fr/ch09s02.html#substringremoval
précisément :
${chaine%%souschaine}
Supprime la plus grande correspondance de $souschaine à partir de la fin de $chaine.
Donc si i="mon theme2 - Mon fichier2.txt" , "${i%% -*}" sera égal à "mon theme2"
(ou "${i%%_-*}" si tu as supprimé les espaces)
À partir de là on peut créer notre dossier avec "mkdir -p" (-p pour éviter un message d'erreur si le dossier existe) et on déplace avec mv
for i in *.txt ; do d="${i%% -*}" ; mkdir -p "$d" ; mv "$i" -t "$d" ; done
En remplaçant le "${i%% -*}" par "${i%%_-*}" si tu as déjà remplacé les espaces par _ dans les noms.
Précision : "%% -*" supprime le premier " -" et tout ce qu'il y a derrière. J'ai supposé qu'il y avait toujours un espace avant le tiret, sinon il faudra adapter.
Sinon pour remplacer les espaces (ou les remettre), il est plus simple d'utiliser "rename", sans même faire de boucle :
rename 'y/ /_/' *
Dernière modification par Alain.g (Le 24/03/2008, à 15:59)
Xubuntu Karmic !
Hors ligne
Pages : 1