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é.