J'ai essayé de supprimer les fichiers commençant par A et se terminant par 2 chiffres, mais cela ne fait rien.
Ce que j'ai essayé:
rm ^A*[0..9]2$
Où ai-je tort?
Vous pouvez utiliser la commande suivante pour supprimer tous les fichiers correspondant à vos critères:
ls | grep -P "^A.*[0-9]{2}$" | xargs -d"\n" rm
Comment ça marche:
ls
répertorie tous les fichiers (un par ligne car le résultat est canalisé).
grep -P "^A.*[0-9]{2}$"
filtre la liste des fichiers et ne laisse que ceux qui correspondent à l'expression régulière ^A.*[0-9]{2}$
.*
indique un nombre quelconque d'occurrences de .
, où .
est un caractère générique correspondant à n'importe quel caractère.
[0-9]{2}
indique exactement deux occurrences de [0-9]
, c'est-à-dire n'importe quel chiffre.
xargs -d"\n" rm
s'exécute rm line
une fois pour tout ce line
qui lui est acheminé.
Où ai-je tort?
Pour commencer, rm
n'accepte pas une expression régulière comme argument. Outre le caractère générique *
, tous les autres personnages sont traités littéralement.
De plus, votre expression régulière est légèrement décalée. Par exemple, *
signifie que toutes les occurrences ...
dans une expression régulière, de sorte A*
matchs A
, AA
etc. et même une chaîne vide.
Pour plus d'informations, visitez Regular-Expressions.info .
-d"\n
commutateur résout le problème des espaces.grep -P
(expression rationnelle Perl).grep -E
peut fonctionner dans ce cas.-I
avecxargs
et toujours tester avec des commandes non létales d'abord:xargs -d"\n" -I {} echo "{}"
ls
? Voir cette question qui pointe vers cet article . En raison des pièges, vous pouvezrm
ce que vous ne voulez pas.Ou en utilisant
find
:Cette solution traitera les noms de fichiers étranges .
la source
-type f
xargs
approche avecrm -f
.Voir la section d' extension du nom de fichier de la page de manuel bash:
la source
La solution avec regexp est 200 fois meilleure, même avec cela, vous pouvez voir quel fichier sera supprimé avant d'utiliser la commande, coupant le canal final:
Si c'est correct, utilisez simplement:
C'est 200 fois mieux car si vous travaillez avec Unix, il est important de savoir comment utiliser grep. C'est très puissant si vous savez comment l'utiliser.
la source
Cela fonctionne sur mon mac:
rm $(ls | grep -e '^A*[0..9]2$')
la source
find
La commande fonctionne également avec les expressions rationnelles.Vérifiez quels fichiers vont être supprimés
Supprimer les fichiers
la source