Renommer plusieurs fichiers en bash

Résolu
Jeremyprog -  
 Jeremyprog -
Bonjour,
J'ai un dossier qui contient plusieurs fichiers texte.
popo.txt
lulu.txt
titi.txt

Je voulais renommer les fichiers en
doc1.txt
doc2.txt
doc3.txt


Je pense avec
rename
et une boucle mais je n'arrive pas à la structurer

Merci de votre aide :)
A voir également:

3 réponses

mamiemando Messages postés 33769 Date d'inscription   Statut Modérateur Dernière intervention   7 879
 
Bonjour,

Il faut itérer sur les fichiers de ton dossier en récupérant le résultat de la commande
find
. Au cours de cette itération, tu incrémentes un compteur qui te permettra de construire le nom des fichiers cibles. Puis tu fais le renommage avec
rename
ou
mv
.

Le mieux est d'écrire un petit script (e.g.
script.sh
)

#!/bin/bash
i=0
for f in $(find $1 | grep "txt$"); do 
    dir=$(dirname "$f")
    mv "$f" "$dir/doc$i.txt"
    i=$(($i+1))
done


On sauve, on quitte et depuis un terminal, on rend le script exécutable, et on prépare un petit test :
chmod a+x script.sh
mkdir -p toto
touch toto/popo.txt toto/lulu.txt toto/titi.txt


... et on lance le script :

(mando@silk) (~) $ ls toto/
lulu.txt popo.txt titi.txt
(mando@silk) (~) $ ./script.sh toto/
(mando@silk) (~) $ ls toto/
doc0.txt doc1.txt doc2.txt


Bonne chance
2
Jeremyprog
 
Un grand merci à toi pour ta réponse rapide et complète ça fonctionne parfaitement merci beaucoup
0
mamiemando Messages postés 33769 Date d'inscription   Statut Modérateur Dernière intervention   7 879 > Jeremyprog
 
Parfait, bonne continuation :-)
0
dubcek Messages postés 18789 Date d'inscription   Statut Contributeur Dernière intervention   5 637
 
hello
enlever le -n si c'est ok
$ rename -n 's/.+/our $i; sprintf("doc%d.txt", 1+$i++)/e' *.txt
rename(lulu.txt, doc1.txt)
rename(popo.txt, doc2.txt)
rename(titi.txt, doc3.txt)
1
Jeremyprog
 
Très intéressant en une seule ligne de commande Merci beaucoup ca fonctionne parfaitement :)
0