#1 Le 06/04/2015, à 11:12
- Link_Octree
[Bash] Renommer plusieurs fichiers en conservant qu'une partie du nom
Hello,
Je dispose d'un dossier contenant plusieurs fichiers .csv nommés sous la forme Blablabla - Blablabla - 3101.csv.
Je souhaiterais renommer ces fichiers en ne conservant que les quatre derniers charactères précédent l'extension.
Même si c'est pas l'idéal, j'aimerais beaucoup faire celà via cut, que je connais un petit peu, et que je pourrais ainsi adapter dans d'autres scripts futurs.
J'aimerais ensuite inverser les deux premiers et les deux dernières charactères pour obtenir la date sous la forme US (mois/jour) du genre 0131.csv
Le bout de code auquel j'ai pensé et qui ne fonctionne pas est le suivant:
for file in /home/user/dossier
do
mv $file $file | cut -d"." -f1 | tail -c5
done
Merci beaucoup
Hors ligne
#2 Le 06/04/2015, à 11:42
- pingouinux
Re : [Bash] Renommer plusieurs fichiers en conservant qu'une partie du nom
Bonjour,
Tu peux essayer ceci
for file in /home/user/dossier/*.csv
do
bsn=$(basename "$file" .csv | tail -c5)
drn=$(dirname "$file")
nom=${bsn:2:2}${bsn:0:2}.csv
echo mv -i "$file" "$drn/$nom"
done
et enlever le echo si c'est bon.
Hors ligne
#3 Le 06/04/2015, à 12:20
- Link_Octree
Re : [Bash] Renommer plusieurs fichiers en conservant qu'une partie du nom
Merci du tuyau mais çà ne fonctionne pas: le script ne semble pas s'appliquer correctement au 4 derniers charactères du nom du fichier:
+ for file in '/home/user/dossier/*.csv'
++ basename PMT .csv
++ tail -c5
+ bsn=PMT
++ dirname PMT
+ drn=.
+ nom=TPM.csv
+ mv -i PMT ./TPM.csv
mv: impossible d'évaluer « PMT »: Aucun fichier ou dossier de ce type
Hors ligne
#4 Le 06/04/2015, à 12:42
- pingouinux
Re : [Bash] Renommer plusieurs fichiers en conservant qu'une partie du nom
Es-tu sûr que les noms de fichiers aient le format que tu indiques en #1 : Blablabla - Blablabla - 3101.csv
Que retourne
ls -l /home/user/dossier/*.csv
Hors ligne
#5 Le 06/04/2015, à 17:59
- tiramiseb
Re : [Bash] Renommer plusieurs fichiers en conservant qu'une partie du nom
Salut,
Juste pour rebondir sur ta toute première idée, la bonne syntaxe aurait été :
for file in /home/user/dossier/*.csv
do
mv "$file" "$(echo "$file" | cut -d"." -f1 | tail -c5)"
done
Après, ce que propose pingouinux est bien sûr très bien, c'est juste une manière différente.
----------------
Ensuite, concernant l'erreur rencontrée, la chose suivante me chiffonne beaucoup :
la boucle "for" semble bien se faire sur les fichiers "*.csv", mais l'exécution de la commande "basename" semble se faire sur un fichier qui s'appelle juste "PMT", donc ne correspondant pas à "*.csv". Ça ne vous chiffonne pas, vous ? pingouinux ?
Sébastien Maccagnoni - https://www.maccagnoni.eu - https://www.domotego.com
Hors ligne
#6 Le 06/04/2015, à 19:34
- pingouinux
Re : [Bash] Renommer plusieurs fichiers en conservant qu'une partie du nom
@tiramiseb :
As-tu vu que Link_Octree veut aussi modifier le format de la date (inversion du jour et du mois) ? Et il faut aussi rajouter le suffixe.
la boucle "for" semble bien se faire sur les fichiers "*.csv", mais l'exécution de la commande "basename" semble se faire sur un fichier qui s'appelle juste "PMT", donc ne correspondant pas à "*.csv".
Je suis d'accord avec toi que quelque chose n'est pas cohérent, et je voulais justement voir la liste des fichiers. Il faudrait voir aussi le script tel qu'il a été lancé.
Hors ligne
#7 Le 06/04/2015, à 19:37
- tiramiseb
Re : [Bash] Renommer plusieurs fichiers en conservant qu'une partie du nom
As-tu vu que Link_Octree veut aussi modifier le format de la date
Au temps pour moi. En effet je n'avais pas vu ça. Mon message avait pour seul but de lui montrer ce qui aurait été une syntaxe correcte pour sa première approche, je n'aurais pas dû dire que ça fait ce qu'il veut et ce n'est pas équivalent à ce que tu proposes. Je me suis avancé un peu trop vite, en lisant mal.
(bon allez, à ma décharge, je suis malade, je souffre horriblement de la gorge, arrggghh je meurs, je vais mourir, arrggghhh infirmièèèère viiiiiiite, des gratouilles )
Il faudrait voir aussi le script tel qu'il a été lancé.
Oui, c'est impératif.
Sébastien Maccagnoni - https://www.maccagnoni.eu - https://www.domotego.com
Hors ligne