J'ai un répertoire contenant un grand nombre de fichiers. Je veux supprimer tous les fichiers sauf file.txt . Comment faire ?
Il y a trop de fichiers pour supprimer les indésirables individuellement et leurs noms sont trop divers pour être utilisés * pour tous les supprimer sauf celui-ci.
Quelqu'un a suggéré d'utiliser
rm !(file.txt)
Mais ça ne marche pas. Il renvoie :
Badly placed ()'s
Mon système d'exploitation est Scientific Linux 6.
Des idées ?
Réponse acceptée :
POSIX :
find . ! -name 'file.txt' -type f -exec rm -f {} +
supprimera tous les fichiers normaux (récursivement, y compris les fichiers cachés) sauf file.txt . Pour supprimer des répertoires, modifiez -type f à -type d et ajoutez -r option pour rm .
Dans bash , pour utiliser rm -- !(file.txt) , vous devez activer extglob :
$ shopt -s extglob
$ rm -- !(file.txt)
(ou en appelant bash -O extglob )
Notez que extglob ne fonctionne que dans bash et la famille des coquillages Korn. Et en utilisant rm -- !(file.txt) peut entraîner une Argument list too long erreur.
En zsh , vous pouvez utiliser ^ pour annuler le motif avec extendedglob activé :
$ setopt extendedglob
$ rm -- ^file.txt
ou en utilisant la même syntaxe avec ksh et bash avec les options ksh_glob et no_bare_glob_qual activé.