Suppression fichiers via une regex.
Bonjour,
Je souhaite recherche et supprimer tous les fichiers suivants :
Je souhaite supprimer les fichiers
Je peux le faire de cette manière
Mais je pense qu'avec une regex on peut peut être faire différemment pour supprimer les fichiers souhaités!
Une idée?
Merci
--
L'accès au savoir est la première liberté que chaque homme devrait avoir.
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
--
L'accès au savoir est la première liberté que chaque homme devrait avoir.
3 réponses
-
Bonjour,
Je ne pense pas que la commande que tu proposes fasses ce que tu as prévu de faire (tu ne vas supprimer quelog.11.gz
etlog.12.gz
).
Une expression rationnelle peut permettre de supprimer les fichiersmv.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 rationnellemv.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 - quelque chose qui contient
-
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 fichiersmv.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 fichiersmv.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 -
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.