Suppression fichiers via une regex.

Fermé
pcsystemd Messages postés 691 Date d'inscription dimanche 27 novembre 2005 Statut Membre Dernière intervention 15 janvier 2024 - 11 août 2021 à 08:15
mamiemando Messages postés 33081 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 27 avril 2024 - 17 août 2021 à 13:56
Bonjour,

Je souhaite recherche et supprimer tous les fichiers suivants :

mv.log.1.gz
mv.log.2.gz
mv.log.3.gz
mv.log.4.gz
mv.log.5.gz
mv.log.6.gz
mv.log.7.gz
mv.log.8.gz
mv.log.9.gz
mv.log.10.gz
mv.log.11.gz
mv.log.12.gz


Je souhaite supprimer les fichiers
mv.log.6.gz
mv.log.7.gz
mv.log.8.gz
mv.log.9.gz
mv.log.10.gz
mv.log.11.gz
mv.log.12.gz


Je peux le faire de cette manière
find agences \( -name 'mv.log.12?*' -o -name 'mv.log.11?* \) -exec rm -f {} \;


Mais je pense qu'avec une regex on peut peut être faire différemment pour supprimer les fichiers souhaités!

Une idée?
Merci

Configuration: Linux / Chrome 91.0.4472.114

A voir également:

3 réponses

mamiemando Messages postés 33081 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 27 avril 2024 7 749
Modifié le 16 août 2021 à 14:31
Bonjour,

Je ne pense pas que la commande que tu proposes fasses ce que tu as prévu de faire (tu ne vas supprimer que
log.11.gz
et
log.12.gz
).

Une expression rationnelle peut permettre de supprimer les fichiers
mv.log.6.gz
à
mv.log.12.gz
, mais ne sera pas aussi limpide que ce qu'on pourrait espérer. En effet, une expression rationnelle raisonne caractère par caractère (et ne permet donc pas de définir une clause basée sur des valeur numérique, dans ton cas
>= 6
).

Tu peux par utiliser l'expression rationnelle
mv.log.([6-9]|1[0-2]).gz
qui signifie :
  • quelque chose qui contient
    mv.log.
    ;
  • suivi d'un caractère compris entre
    '6'
    et
    '9'
    (au sens ASCII), ou du caractère
    '1'
    suivi d'un caractère compris entre
    '0'
    et
    '2'
    ;
  • suivi des caractères
    '.gz'
    .


Exemple :

(mando@silk) (~) $ mkdir toto
(mando@silk) (~) $ cd toto
(mando@silk) (~/toto) $ for i in $(seq 1 12); do touch mv.log.$i.gz; done
(mando@silk) (~/toto) $ ls
mv.log.10.gz mv.log.12.gz mv.log.2.gz mv.log.4.gz mv.log.6.gz mv.log.8.gz
mv.log.11.gz mv.log.1.gz mv.log.3.gz mv.log.5.gz mv.log.7.gz mv.log.9.gz


(mando@silk) (~/toto) $ find . | egrep "mv.log.([6-9]|1[0-2]).gz"
./mv.log.10.gz
./mv.log.6.gz
./mv.log.7.gz
./mv.log.9.gz
./mv.log.12.gz
./mv.log.8.gz
./mv.log.11.gz


(mando@silk) (~/toto) $ rm $(find . | egrep "mv.log.([6-9]|1[0-2]).gz")


(mando@silk) (~/toto) $ ls
mv.log.1.gz mv.log.2.gz mv.log.3.gz mv.log.4.gz mv.log.5.gz


Bonne chance
1
mamiemando Messages postés 33081 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 27 avril 2024 7 749
Modifié le 17 août 2021 à 13:59
Bonjour,

Ma commande fonctionne parfaitement...

Ma remarque était plus que par rapport à la question de départ, la commande que tu proposes dans ton premier message ignore les fichiers
mv.log.6.gz
à
mv.log.10.gz
.

Ceci dit, cela me donne une idée beaucoup plus simple qu'utiliser une expression rationnelle :-)

Plutôt que lister les fichiers et filtrer ceux qui t'intéressent, tu peux générer à la volée le nom des fichiers. L'avantage, c'est que tu pourras facilement spécifier l'index de départ et de fin des fichiers à supprimer. Pour cela on adapte la commande que j'ai utilisée dans mon précédent message :

Pour supprimer les fichiers
mv.log.6.gz
à
mv.log.11.gz
inclus, il suffit de lancer :

for i in $(seq 6 11); do rm mv.log.$i.gz; done


Exemple :

(mando@silk) (~/toto) $ ls
mv.log.10.gz mv.log.12.gz mv.log.2.gz mv.log.4.gz mv.log.6.gz mv.log.8.gz
mv.log.11.gz mv.log.1.gz mv.log.3.gz mv.log.5.gz mv.log.7.gz mv.log.9.gz


(mando@silk) (~/toto) $ for i in $(seq 6 11); do rm mv.log.$i.gz; done


(mando@silk) (~/toto) $ ls
mv.log.12.gz mv.log.1.gz mv.log.2.gz mv.log.3.gz mv.log.4.gz mv.log.5.gz


Bonne chance
1
pcsystemd Messages postés 691 Date d'inscription dimanche 27 novembre 2005 Statut Membre Dernière intervention 15 janvier 2024 22
16 août 2021 à 16:14
Merci

Ma commande fonctionne parfaitement mais c'etait un exemple il faudra bien sur ajouter des
-o -name 'mv.log.14?*  -o -name 'mv.log.15?*
etc.. pour chaque fichier a supprimer ce qui je te l'accorde n'est pas optimum et c'est la raison de ma question.

Merci je vais étudier tes autres commandes.
0