GNU/Linux >> Tutoriels Linux >  >> Linux

Comment supprimer plusieurs fichiers à la fois dans Bash sous Linux ?

Si vous souhaitez supprimer tous les fichiers dont les noms correspondent à une forme particulière, un caractère générique (modèle glob) est la solution la plus simple. Quelques exemples :

$ rm -f abc.log.*             # Remove them all
$ rm -f abc.log.2012*         # Remove all logs from 2012
$ rm -f abc.log.2012-0[123]*  # Remove all files from the first quarter of 2012

Les expressions régulières sont plus puissantes que les caractères génériques ; vous pouvez alimenter la sortie de grep à rm -f . Par exemple, si certains noms de fichiers commencent par "abc.log" et certains avec "ABC.log" , grep vous permet de faire une correspondance insensible à la casse :

$ rm -f $(ls | grep -i '^abc\.log\.')

Cela causera des problèmes si l'un des noms de fichiers contient des caractères amusants, y compris des espaces. Soyez prudent.

Quand je fais cela, je lance le ls | grep ... commande d'abord et vérifiez qu'elle produit la sortie que je veux - surtout si j'utilise rm -f :

$ ls | grep -i '^abc\.log\.'
(check that the list is correct)
$ rm -f $(!!)

!! se développe à la commande précédente. Ou je peux taper flèche vers le haut ou Ctrl-P et modifier la ligne précédente pour ajouter le rm -f commande.

Cela suppose que vous utilisez le shell bash. Certains autres shells, en particulier csh et tcsh et certains anciens shells dérivés de sh, peuvent ne pas prendre en charge le $(...) syntaxe. Vous pouvez utiliser la syntaxe de backtick équivalente :

$ rm -f `ls | grep -i '^abc\.log\.'`

Le $(...) la syntaxe est plus facile à lire, et si vous êtes vraiment ambitieux, elle peut être imbriquée.

Enfin, si le sous-ensemble de fichiers que vous souhaitez supprimer ne peut pas être facilement exprimé avec une expression régulière, une astuce que j'utilise souvent consiste à répertorier les fichiers dans un fichier texte temporaire, puis à le modifier :

$ ls > list
$ vi list   # Use your favorite text editor

Je peux alors éditer le list fichier manuellement, en ne laissant que les fichiers que je souhaite supprimer, puis :

$ rm -f $(<list)

ou

$ rm -f `cat list`

(Encore une fois, cela suppose qu'aucun des noms de fichiers ne contient de caractères amusants, en particulier des espaces.)

Ou, lors de l'édition du list fichier, je peux ajouter rm -f au début de chaque ligne puis :

$ . ./list

ou

$ source ./list

La modification du fichier est également l'occasion d'ajouter des guillemets si nécessaire, par exemple en modifiant rm -f foo bar à rm -f 'foo bar' .


Utilisez simplement la sélection multiligne dans sublime pour combiner tous les fichiers en une seule ligne et ajoutez un espace entre chaque nom de fichier, puis ajoutez rm au début de la liste. Ceci est surtout utile lorsqu'il n'y a pas de modèle dans les noms de fichiers que vous souhaitez supprimer.

[$]> rm abc.log.2012-03-14 abc.log.2012-03-27 abc.log.2012-03-28 abc.log.2012-03-29 abc.log.2012-03-30 abc.log.2012-04-02 abc.log.2012-04-04 abc.log.2012-04-05 abc.log.2012-04-09 abc.log.2012-04-10

Bash prend en charge toutes sortes de caractères génériques et d'extensions.

Votre cas exact serait traité par l'expansion des accolades, comme ceci :

$ rm -rf abc.log.2012-03-{14,27,28}

Ce qui précède serait étendu à une seule commande avec les trois arguments, et équivaut à taper :

$ rm -rf abc.log.2012-03-14 abc.log.2012-03-27 abc.log.2012-03-28

Il est important de noter que cette expansion est effectuée par le shell, avant rm est même chargé.


Utilisez un caractère générique (* ) pour faire correspondre plusieurs fichiers.

Par exemple, la commande ci-dessous supprimera tous les fichiers dont le nom commence par abc.log.2012-03- .

rm -f abc.log.2012-03-*

Je recommanderais d'exécuter ls abc.log.2012-03-* pour lister les fichiers afin que vous puissiez voir ce que vous allez supprimer avant d'exécuter le rm commande.

Pour plus de détails, consultez la page de manuel de Bash sur l'expansion des noms de fichiers.


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

  2. Comment gérer les fichiers journaux à l'aide de Logrotate sous Linux

  3. Comment compresser plusieurs fichiers sous Linux

  4. Comment renommer plusieurs fichiers à la fois sous Linux

  5. Comment faire pivoter les fichiers journaux Apache sous Linux

Comment supprimer des fichiers répertoriés dans un autre fichier sous Linux

Comment afficher les fichiers journaux Nginx sous Linux

Comment afficher les fichiers journaux Apache sous Linux

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

Comment exécuter plusieurs commandes Linux à la fois dans le terminal Linux

Comment supprimer des fichiers et des répertoires à l'aide de la ligne de commande Linux