3 façons de supprimer tous les fichiers dans un répertoire, sauf un ou quelques fichiers avec des extensions

3 façons de supprimer tous les fichiers dans un répertoire, sauf un ou quelques fichiers avec des extensions

Parfois, vous entrez dans une situation où vous devez supprimer tous les fichiers dans un répertoire ou simplement nettoyer un répertoire en supprimant tous les fichiers à l'exception des fichiers d'un type donné (se terminant par une extension particulière).

Dans cet article, nous vous montrerons comment supprimer des fichiers dans un répertoire, sauf certaines extensions ou types de fichiers en utilisant RM, trouver et glognore commandes.

Avant d'aller plus loin, commençons par jeter un coup d'œil brièvement sur un concept important dans Linux - correspondance du modèle de nom de fichier, qui nous permettra de faire face à notre problème à portée de main.

Lire suggérée: Utilisez la commande find pour rechercher plusieurs noms de fichiers / extensions dans Linux

Dans Linux, un motif de shell est une chaîne qui se compose des caractères spéciaux suivants, qui sont appelés faunes ou métacharacteurs:

  1. * - correspond à zéro ou plus de personnages
  2. ? - correspond à n'importe quel personnage unique
  3. [SEQ] - correspond à n'importe quel personnage en seq
  4. [!seq] - correspond à n'importe quel personnage non en seq

Il y a trois méthodes possibles que nous explorerons ici, et celles-ci comprennent:

Supprimer les fichiers à l'aide des opérateurs de correspondance de motifs étendus

Les différents opérateurs de correspondance de motifs étendus sont répertoriés ci-dessous, où liste de modèles est une liste contenant un ou plusieurs noms de fichiers, séparés en utilisant le | personnage:

  1. * (liste de modèle) - correspond à zéro ou plus d'occurrences des modèles spécifiés
  2. ?(Match-list) - correspond à zéro ou à une occurrence des modèles spécifiés
  3. +(Match-list) - correspond à une ou plusieurs occurrences des modèles spécifiés
  4. @ (Match-list) - correspond à l'un des modèles spécifiés
  5. !(Match-list) - correspond tout sauf l'un des modèles donnés

Pour les utiliser, activez le extension Option shell comme suit:

# shopt -s Extglob 

1. Pour supprimer tous les fichiers dans un répertoire sauf le nom de fichier, saisissez la commande ci-dessous:

$ rm -v !("nom de fichier") 
Supprimer tous les fichiers sauf un fichier dans Linux

2. Pour supprimer tous les fichiers à l'exception de nom de fichier1 et nom de fichier2:

$ rm -v !("filename1" | "filename2") 
Supprimer tous les fichiers sauf quelques fichiers dans Linux

3. L'exemple ci-dessous montre comment supprimer tous les fichiers autres que tous .zipper Fichiers de manière interactive:

$ rm -i !(*.zipper) 
Supprimer tous les fichiers sauf les fichiers zip dans Linux

4. Ensuite, vous pouvez supprimer tous les fichiers dans un répertoire en dehors de tous .zipper et .ODT Fichiers comme suit, tout en affichant ce qui est fait:

$ rm -v !(*.zip | *.ODT) 
Supprimer tous les fichiers à l'exception de certaines extensions de fichiers

Une fois que vous avez toutes les commandes requises, éteignez le extension Option de coquille comme tel:

$ shopt -u extglob 

Supprimer des fichiers à l'aide de la commande Linux Find

Selon cette méthode, nous pouvons utiliser la commande de recherche exclusivement avec des options appropriées ou en conjonction avec xargs Commande en utilisant un pipeline comme dans les formes ci-dessous:

$ Find / Directory / -Type F -not -Name 'Pattern' -delete $ Find / Directory / -Type F -not -Name 'Pattern' -print0 | xargs -0 -i  rm  $ Find / Directory / -Type F -not -Name 'Pattern' -print0 | xargs -0 -i  rm [options]  

5. La commande suivante supprimera tous les fichiers en dehors de .gz Fichiers dans le répertoire actuel:

$ trouver . -type f -not -name '*.gz'-delete 
Commande Find - Supprimer tous les fichiers sauf .Fichiers GZ

6. Utilisant un pipeline et xargs, Vous pouvez modifier le cas ci-dessus comme suit:

$ trouver . -type f -not -name '* gz' -print0 | xargs -0 -i  rm -v  
Supprimer les fichiers à l'aide des commandes Find et Xargs

7. Examinons un exemple supplémentaire, la commande ci-dessous effacera tous les fichiers à l'exclusion .gz, .ODT, et .jpg Fichiers dans le répertoire actuel:

$ trouver . -type f -not \ (- name '* gz' -or -name '* odt' -or -name '*.jpg '\) -delete 
Supprimer tous les fichiers à l'exception des extensions de fichiers

Supprimer des fichiers à l'aide de la variable Bash Globignore

Cette dernière approche ne fonctionne cependant qu'avec Bash. Ici le Glognore La variable stocke une liste de motifs séparée par le côlon (noms de fichiers) à ignorer par l'expansion de PathName.

Lire suggérée: Utile 12 exemples pratiques sur la commande grep dans Linux

Pour utiliser cette méthode, montez dans le répertoire que vous souhaitez nettoyer, puis définissez le Glognore variable comme suit:

$ cd test $ globignore = *.ODT: *.ISO: *.SMS 

Dans ce cas, tous les fichiers autres que .ODT, .ISO, et .SMS les fichiers avec être supprimés du répertoire actuel.

Maintenant, exécutez la commande pour nettoyer le répertoire:

$ rm -v * 

Ensuite, éteignez Glognore variable:

$ unset glopignore 
Supprimer des fichiers à l'aide de la variable Bash Globignore

Note: Pour comprendre la signification des drapeaux utilisés dans les commandes ci-dessus, reportez-vous aux pages de l'homme de chaque commande que nous avons utilisées dans les différentes illustrations.

C'est tout! Si vous avez à l'esprit d'autres techniques de ligne de commande dans le même but, n'oubliez pas de partager avec nous via notre section de rétroaction ci-dessous.