GNU/Linux >> Tutoriels Linux >  >> Linux

Supprimer tous les fichiers/répertoires sauf un fichier ?

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


Linux
  1. Comment trouver un fichier sous Linux dans tous les répertoires de manière récursive

  2. Comment supprimer tous les fichiers sauf un fichier nommé d'un dossier spécifique ?

  3. Linux :supprimer les extensions de fichiers pour plusieurs fichiers

  4. lien symbolique :trouver tous les fichiers liés à ce fichier

  5. Convertir toutes les extensions de fichiers en minuscules

Commande ls sous Linux pour lister les fichiers

Trouver tous les fichiers de plus d'une minute

Trouver des répertoires contenant tous les fichiers antérieurs à X ?

Supprimer tous les liens symboliques des fichiers en une seule commande

bash - supprime tous les répertoires (et contenus) mais pas les fichiers dans pwd

Définissez nginx.conf pour refuser toutes les connexions sauf à certains fichiers ou répertoires