Commande rename avec variable
Résolu/Fermémamiemando Messages postés 33357 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 13 novembre 2024 - 10 août 2022 à 12:17
- Commande rename avec variable
- Invite de commande - Guide
- Commande terminal mac - Guide
- Lupas rename - Télécharger - Gestion de fichiers
- Bulk rename utility - Télécharger - Gestion de fichiers
- A-pdf rename - Télécharger - PDF
6 réponses
Modifié le 9 août 2022 à 15:14
Bonjour,
Je ne sais pas ce que c'est que c'est que cette commande "rename", mais elle n'est pas standard. Pour renommer un fichier, normalement, on utilise simplement mv.
Si tu veux renommer des fichiers, le plus simple est peut être de faire une boucle for. Dans la commande suivante :
- find . liste les fichiers à partir du dossier courant ;
- grep "\.txt$" ne conserve que les fichiers dont le nom se termine par ".txt"
- mv est utilisé pour renommer le fichier courant ($x) comme tu le souhaites.
for x in $(find . | grep "\.txt$"); do mv "$x" "$(dirname $x)/$(date '+%d%m%Y')_$(basename $x)"; done
Bonne chance
9 août 2022 à 17:03
hello
essayer
export DATE=$(date '+%d%m%Y') rename -n 's/.txt/$ENV{DATE}.txt/' *
enlever le -n si ok
9 août 2022 à 16:17
Certes elle n'est pas standard mais elle existe.
Merci pour la boucle.
9 août 2022 à 16:45
En tout cas si tu parles de cette commande elle ne semble pas supporter pas d'expression à la sed d'après la documentation.
De rien pour la boucle, et bonne continuation ;-)
10 août 2022 à 09:27
Merci dubcek.
Le souci c'est que c'est pour un script bash et je ne peux pas faire un export car on a différentes variables qui se noment identiques DATE mais avec des valeurs différentes.
10 août 2022 à 09:54
je na'i pas compris
on peut faire
DATE=$(date '+%d%m%Y'); export DATE
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question10 août 2022 à 09:28
@mamiemando
Dans ta boucle la date est ajoutée en début de fichier comme cela :
10082022_file.txt
J'ai essayé en modifiant l'emplacement de la date dans la boucle for mais je n'arrive pas a voir ce que je souhaiterais c'est à dire :
file_10082022.txt
Une idée?
Merci
10 août 2022 à 11:06
Cela fonctionne pour moi.
Merci à vous deux.
for file in *.txt do name=`echo "$file" | cut -d'.' -f1` ext=`echo "$file" | cut -d'.' -f2` mv $file "$name"_`date +%Y%m%d`".$ext" done
10 août 2022 à 12:17
Le code comporte quelques erreurs :
- Il ne marche que si te restreins aux fichiers du dossier courant, mais dès que tu veux l'appliquer récursivement à ses sous dossiers, il vaudrait mieux adapter la solution #1 et utiliser dirname et basename.
- Si des fichiers comportent des espaces, le mv échouera car tu n'as pas entouré $file avec des guillemets. Et il y a plein d'autres petits pièges (voir ce lien et ce lien).
Voici à quoi il pourrait ressembler
#!/bin/bash find . -type f | grep "\.txt$" | while read path do dir=$(dirname "$path") file=$(basename "$path") name=$(echo "$file" | cut -d'.' -f1) ext=$(echo "$file" | cut -d'.' -f2) echo mv "$dir/$file" "${dir}/${name}_$(date +%Y%m%d).${ext}" done
Bonne chance