(13 réponses)
Fermé il y a 5 ans.
Voici la situation.
J'ai un répertoire qui contient de nombreux fichiers avec différentes extensions. Je veux supprimer tous les fichiers sauf un avec un nom spécifique.
Cela pourrait être facilement fait en utilisant l'interface graphique en sélectionnant tout et en appuyant sur ctrl et en désélectionnant le fichier en question.
C'est exactement ce que je veux, mais comment puis-je le faire depuis la ligne de commande ?
Par exemple : dirA contient les fichiers suivants :
a.txt
b.txt
c.php
d.html
a.db
b.db
e.html
Je veux supprimer tous les fichiers en ne gardant que le fichier nommé a.txt
.
Meilleure réponse
Je suis venu avec cette commande simple et géniale :
rm !(a.txt)
vous pouvez utiliser ! comme une négation
Testez d'abord le glob avec echo, c'est-à-dire
echo !(a.txt)
Si cela ne fonctionne pas, pour bash
vous devrez peut-être l'activer avec
shopt -s extglob
Si vous vouliez conserver les deux a.txt
et b.txt
, vous pouvez utiliser !(a.txt|b.txt)
ou !([ab].txt)
.
Modifier :
faire rm
travailler de manière récursive, ajoutez simplement -r
j'aime
rm -r !(a.txt)
et aussi, il travaille avec le dossier. juste besoin de changer le nom du répertoire, comme pour a_dir
rm -r !(a_dir)