GNU/Linux >> Tutoriels Linux >  >> Linux

Comment supprimer des fichiers avec une extension spécifique dans la ligne de commande Linux

Vous pourriez avoir une situation où vous souhaitez supprimer plusieurs fichiers qui ont une extension particulière. Ce tutoriel vous aidera à faire exactement cela.

Vous utilisez la commande rm pour supprimer des fichiers et des dossiers de la manière suivante :

rm [option] filename

Il peut sembler que vous ayez besoin de connaître les noms de fichiers exacts ici, mais ce n'est pas vrai.

Laissez-moi vous montrer quelques méthodes pour supprimer plusieurs fichiers en fonction de leur extension de fichier.

Méthode 1 :supprimer des fichiers par extension à l'aide de la commande rm

Dans mon exemple, j'ai un tas de fichiers gif qui se terminent par des extensions .gif.

Pour les supprimer, je peux utiliser la commande rm comme ceci :

rm *.gif

Supprimer des fichiers aveuglément comme ça pourrait être risqué. Il est toujours bon de voir d'abord quels fichiers seront supprimés à l'aide de la commande ls :

ls *.gif

Voici comment je supprime les fichiers avec l'extension .gif :

$ ls
1.gif  2.gif  3.gif  4.gif  a.jpg  b.png  c.webp

$ ls *.gif
1.gif  2.gif  3.gif  4.gif


$ rm -v *.gif
removed '1.gif'
removed '2.gif'
removed '3.gif'
removed '4.gif'

$ ls
a.jpg  b.png  c.webp

Cela peut être fait pour n'importe quelle extension de fichier, pas seulement .gif. Vous pouvez même combiner plusieurs extensions.

$ ls
f1.txt  f2.txt  f3.txt  f4.txt  not-txt-file.pdf random.txt


$ rm -v *.txt *.pdf
removed 'f1.txt'
removed 'f2.txt'
removed 'f3.txt'
removed 'f4.txt'
removed 'not-txt-file.pdf'

$ ls
random.txt
💡Vous pouvez utiliser l'option interactive -i avec la commande rm qui demande de confirmer avant de supprimer chaque fichier. Cependant, cela peut ne pas être pratique si vous avez de nombreux fichiers à supprimer.

Vous vous demandez comment ça marche ? Caractères génériques !

En un mot, un caractère générique est un caractère spécial que vous utilisez pour correspondre à un modèle particulier. Vous trouverez ci-dessous quelques caractères génériques fréquemment utilisés :

Wilcard Utiliser
* Mettre en correspondance une ou plusieurs occurrences
 ? Mettre en correspondance une seule occurrence
[] (Crochets) Spécifiez une plage de correspondance
^ Exclure de la correspondance

Vous avez utilisé le caractère générique * ici, ce qui signifie qu'il peut correspondre à une ou plusieurs occurrences de n'importe quel caractère.

Quand vous dites *.gif , cela signifie toute combinaison de lettres menant à .gif . En d'autres termes, il vous donne tous les fichiers avec l'extension .gif .

Chaque caractère générique peut être utilisé en plus d'un autre caractère générique. Mais n'entrons pas dans ces détails pour le moment.

Ce point entre * et l'extension est important !

Beaucoup de gens commettent l'erreur de confondre le *.gif avec *gif . Ça n'est pas correct. Le point (.) entre * et le nom de l'extension est crucial.

Prenez le scénario avec les fichiers suivants et regardez ce qui se passe lorsque j'utilise la regex *gif au lieu de *.gif :

$ ls

1.gif  2.gif  3.gif  4.gif  definately-not-a-gif  jpg-not-gif  not-a-gif


$ rm -v *gif

removed '1.gif'
removed '2.gif'
removed '3.gif'
removed '4.gif'
removed 'definately-not-a-gif'
removed 'jpg-not-gif'
removed 'not-a-gif'

Il a également supprimé les fichiers avec la chaîne gif dedans, même si ce n'était pas l'extension du fichier, il y avait juste gif à la fin du nom de fichier sans le point précédent.

Lorsque vous supprimez des fichiers contenant des caractères génériques ou des expressions régulières, assurez-vous d'être aussi précis que possible.

Méthode 2 :supprimez de manière récursive les fichiers avec une extension particulière à l'aide de la commande find

La commande rm supprime uniquement les fichiers du répertoire courant. Il ne supprime pas les fichiers des sous-répertoires, même avec l'option récursive.

Pour supprimer récursivement des fichiers avec une extension particulière, vous pouvez combiner la commande find et la commande rm :

Voici un exemple où j'ai également des fichiers .gif dans les sous-répertoires.

$ ls *
file_0.gif  file_z.txt  not-a-gif  not-a-txt

dir1:
file_1.gif  file_a.txt  not-a-gif  not-a-txt

dir2:
file_2.gif  file_b.txt  not-a-gif  not-a-txt

dir3:
file_3.gif  file_c.txt  not-a-gif  not-a-txt

dir4:
file_4.gif  file_d.txt  not-a-gif  not-a-txt

Pour supprimer les fichiers, vous pouvez utiliser la commande find comme ceci :

find . -type f -name "*.gif" -exec rm -v {} \;

Voici le résultat lorsque j'ai exécuté la commande :

$ find . -type f -name "*.gif" -exec rm -v {} \;
removed './dir1/file_1.gif'
removed './dir3/file_3.gif'
removed './dir2/file_2.gif'
removed './file_0.gif'
removed './dir4/file_4.gif

Décomposons-le.

  • Le point après "rechercher" signifie rechercher dans le répertoire courant
  • Le drapeau "-name" spécifie le nom du fichier, où nous pouvons utiliser regex
  • Le drapeau "-exec" est utilisé pour exécuter une commande bash sur le résultat de la commande find
  • Les accolades "{}" agissent comme espace réservé pour le résultat du ou des fichiers correspondants, donc "rm -v {}" supprimera les fichiers trouvés par la commande find.
  • Enfin, le point-virgule termine la commande exécutée par votre shell (la commande après exec) et la barre oblique inverse '\' est utilisée pour que le point-virgule soit correctement échappé. Vous ne devriez pas vous en soucier.

Vous pouvez découvrir plus d'exemples de la commande de recherche dans le didacticiel ci-dessous.

Astuce bonus avancée :utilisez la commande find pour travailler sur des fichiers avec plusieurs extensions

La commande ci-dessus ne couvre pas la recherche de fichiers avec plusieurs extensions, quelque chose comme "rm *.gif *.txt"

Pour y parvenir, vous pouvez utiliser le -o argument qui signifie 'opérateur OU logique'. Mais nous devons également utiliser la barre oblique inverse '\' pour échapper aux parenthèses

$ ls *
file_0.gif  file_z.txt  not-a-gif  not-a-txt

dir1:
file_1.gif  file_a.txt  not-a-gif  not-a-txt

dir2:
file_2.gif  file_b.txt  not-a-gif  not-a-txt

dir3:
file_3.gif  file_c.txt  not-a-gif  not-a-txt

dir4:
file_4.gif  file_d.txt  not-a-gif  not-a-txt

$ find . \( -name "*.gif" -o -name "*.txt" \) -exec rm -v {} \;
removed './dir1/file_1.gif'
removed './dir1/file_a.txt'
removed './dir3/file_3.gif'
removed './dir3/file_c.txt'
removed './dir2/file_2.gif'
removed './dir2/file_b.txt'
removed './file_0.gif'
removed './file_z.txt'
removed './dir4/file_d.txt'
removed './dir4/file_4.gif'

Ici, vous pouvez voir que tous les fichiers avec une extension 'txt' et les fichiers avec une extension 'gif' sont supprimés, de manière récursive.

Je sais que vous aurez envie d'utiliser la commande de recherche séparément pour chaque type d'extension de fichier serait plus facile et vous ne vous trompez pas.

Conclusion

Cet article a couvert la suppression de fichiers avec une extension particulière. Nous avons également examiné la recherche et la suppression récursives de ces fichiers.

"Avec un grand pouvoir, viennent de grandes responsabilités" , souvenez-vous-en lorsque vous utilisez des caractères génériques et des expressions régulières. Une erreur de frappe et des fichiers importants peuvent être supprimés involontairement.


Linux
  1. Comment supprimer des fichiers ÉNORMES (100-200 Go) sous Linux

  2. Comment renommer des fichiers sous Linux

  3. Comment supprimer des fichiers et des répertoires sous Linux à partir de la ligne de commande

  4. Comment rechercher des fichiers avec la commande fd sous Linux

  5. Comment remplacer un fichier en jar par une ligne de commande sous Linux ?

Comment rechercher des fichiers avec la commande fd sous Linux

Comment télécharger des fichiers avec la commande Curl sous Linux

Comment télécharger des fichiers avec la commande Wget sous Linux

Comment vérifier la version du système d'exploitation avec la ligne de commande Linux

Comment installer Dig sous Linux avec des exemples de ligne de commande

Comment supprimer/supprimer des fichiers sous Linux à l'aide de la commande rm