Renommer plusieurs fichiers en bash

Résolu/Fermé
Jeremyprog - Modifié le 12 janv. 2022 à 13:07
 Jeremyprog - 12 janv. 2022 à 18:56
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 33077 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 18 avril 2024 7 748
Modifié le 12 janv. 2022 à 13:27
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
Un grand merci à toi pour ta réponse rapide et complète ça fonctionne parfaitement merci beaucoup
0
mamiemando Messages postés 33077 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 18 avril 2024 7 748 > Jeremyprog
12 janv. 2022 à 15:32
Parfait, bonne continuation :-)
0
dubcek Messages postés 18718 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 22 mars 2024 5 615
12 janv. 2022 à 18:27
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
Très intéressant en une seule ligne de commande Merci beaucoup ca fonctionne parfaitement :)
0