131 votes

Comment supprimer tous les fichiers d'un répertoire sauf certains ?

Je dois supprimer tous les fichiers d'un répertoire, mais exclure certains d'entre eux. Par exemple, dans un répertoire contenant les fichiers a b c ... z Je dois tout supprimer sauf u y p . Y a-t-il un moyen facile de le faire ?

2voto

sparkie Points 2200

Pour ceux qui préfèrent spécifier des motifs d'exclusion complexes et arbitraires (couvrant tous les noms de fichiers concernés) dans un style regexp emacs, posix-awk ou posix-extended (voir la page de manuel find), je recommande celui-ci. Il exclut u y p dans le répertoire actuel dans cet exemple. Cela peut être pratique pour les scripts.

find -regextype posix-awk ! -regex './(u|p)' -print0 | xargs -0 rm -rf

2voto

dylnmc Points 231

Encore un autre :

for FILE in ./*; do if [[ $FILE != ./u* ]] || [[ $FILE != ./p* ]];then rm $FILE; fi; done;

C'est un peu long et je ne sais pas si vous pourriez facilement en faire une fonction qui pourrait s'adapter à un nombre arbitraire d'arguments, mais cela fonctionne bien.

Et C'est de la pure bonté.

1voto

J Baron Points 880

J'utilise toujours :

rm [a-o,q-t,v-z]*

Cela vous permettra de définir le degré de granularité que vous souhaitez. Ainsi, si vous voulez supprimer les fichiers a à o et Z, vous pouvez utiliser :

rm [a-o,z]*

1voto

sebhofer Points 111

Encore une autre version utilisant xargs :

ls -1 | grep -v do_not_delete | xargs -I files rm "files"

Notez que xargs -I est nécessaire pour gérer correctement les noms de fichiers incluant des espaces.

1voto

idzikovsky Points 11

Voici une autre variante. Vous pouvez taper :

rm -i *

ou :

rm --interactive *

Alors rm vous demandera de confirmer la suppression de chaque fichier.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X