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
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:
- Suppression fichiers via une regex.
- Forcer suppression fichier - Guide
- Renommer des fichiers en masse - Guide
- Fichiers epub - Guide
- Suppression compte gmail - Guide
- Wetransfer gratuit fichiers lourd - Guide
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 que
Une expression rationnelle peut permettre de supprimer les fichiers
Tu peux par utiliser l'expression rationnelle
Exemple :
Bonne chance
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.gzet
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]).gzqui 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
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
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
Exemple :
Bonne chance
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.gzinclus, 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