Linux renommer extension de certains fichiers en fonction de la date de création

Signaler
-
Messages postés
29624
Date d'inscription
jeudi 12 mai 2005
Statut
Modérateur
Dernière intervention
8 mars 2021
-
Bonjour,

Dans un dossier, j'ai plusieurs fichiers avec de dates de créations différentes.

J'ai besoin de renommer seulement les fichiers datant du 15/01/2021 au 11/01/2021. Les fichiers sont nommés nomfichier.zip.tmp et doivent être renommés nomfichier.zip

avec: mv nomfichier.zip.tmp nomfichier.zip =>> c'est un par un, alors que j'ai une cinquantaine.

avec: mv .zip.tmp .zip * ==> ça va changer tous les fichiers du dossier, alors que je veux seulement ceux entre le 15/01 et le 11/01

avez vous des idées?

Configuration: Windows / Chrome 88.0.4324.146

1 réponse

Messages postés
29624
Date d'inscription
jeudi 12 mai 2005
Statut
Modérateur
Dernière intervention
8 mars 2021
7 041
Bonjour,

Je suppose que tu voulais dire du 11/01 au 15/01 2021.
  • Pour trouver les fichiers entre deux dates, tu peux utiliser
    find
    , comme proposé dans cette discussion.
  • Pour extraire le nom sans
    .tmp
    on peut utilisé l'opérateur
    %.
    comme expliqué dans cette discussion.
  • Pour se restreindre aux fichiers dont le nom termine par
    .zip.tmp
    , on ajoute un filtre à l'aide de
    grep
    .
  • Tant qu'on est en phase de test, plutôt que d'appeler la commande, on va l'afficher avec
    echo
    pour la contrôler.


Dans ton cas, ça donnerait quelque chose du genre :

#!/bin/bash
for file in $(find . -newermt "2021-01-11" ! -newermt "2021-01-15" | grep "\.zip\.tmp$"); do
   echo mv "$file" "${file%.*}"
done


Ce script (appelons-le
script.sh
) doit être placé dans un répertoire parent qui contient les fichiers à traiter. Pour l'exécuter :

chmod a+x script.sh
./script.sh


Si ça te paraît correct, il ne reste plus qu'à enlever
echo
et relancer le script.

Bonne chance