-Listre d'arguments BASH / BIN / RM TROP Long - Solution

-Listre d'arguments BASH / BIN / RM TROP Long - Solution

Symptômes

Ce message d'erreur apparaît lorsque vous essayez de supprimer, de déplacer ou de copier une longue liste de fichiers. Lorsque vous utilisez votre shell, une commande ne peut accepter qu'un nombre limité d'arguments. Lorsque le nombre d'arguments fournis à la commande dépasse le nombre autorisé d'arguments, un message d'erreur apparaît:

-bash: / bin / rm: liste d'arguments trop longtemps 
Commande Linux pour trouver votre limite pour les arguments maximaux:
# getconf arg_max 2097152 

Exemple:

# rm * -bash: / bin / rm: liste d'arguments trop long 

Solution

Il existe un certain nombre de solutions pour ce problème. Premièrement, s'il n'y a pas de fichiers dans un répertoire que nous aimerions conserver, la solution la meilleure et la plus rapide est de simplement supprimer entier le répertoire entier et de le recréer à nouveau. Avant de continuer, assurez-vous que le répertoire ne contient pas de fichiers que vous souhaitez conserver et que vous prenez une note concernant une autorisation et la propriété de ce répertoire.

$ cd… / $ ls -d mydirectory $ rm -fr mydirectory $ mkdir mydirectory 

L'autre solution consiste à engager une boucle pour la boucle et à supprimer tous les fichiers un:

$ pour i in *; faire rm "$ i"; fait 

ou beaucoup plus rapide en utilisant printf et xargs:

$ printf '% s \ 0' * | xargs -0 rm 

ou

$ time echo -n * | tr "\ 0 '| xargs -0 rm 

Cependant, la solution ci-dessus a sa propre limitation car elle peut également supprimer les fichiers que nous aimerions conserver en cas d'expression régulière appropriée en place. Quant à un exemple ici, nous supprimerons uniquement *.SMS des dossiers:

$ pour je dans *.SMS; faire rm "$ i"; fait 

La dernière et proposée solution consiste à utiliser Regex pour diviser tous les fichiers en lots plus petits. Trouvez un modèle similaire dans tous les fichiers et divisez-les en groupes plus petits. Par exemple, supprimer, copier ou déplacer tous les fichiers qui commencent par un et avoir une extension SMS, Après cela, tous les fichiers qui commencent par b et ainsi de suite.:

$ rm a *.txt $ rm b *.SMS 

Vous pouvez également faire ce qui précède pour toutes les lettres en utilisant une boucle pour:

$ pour i dans $ (echo a… z); faire rm $ i *.SMS ; fait 

Tutoriels Linux connexes:

  • Comment déplacer le dossier sur Linux
  • Commandes Linux de base
  • Commandes Linux: les 20 meilleures commandes les plus importantes que vous devez…
  • Vim Editor Basics in Linux
  • Script bash: utilisation des drapeaux avec des exemples d'arguments
  • Comment configurer un serveur OpenVPN sur Ubuntu 20.04
  • Commande man dans Linux avec des exemples
  • Ubuntu 20.04: Liste des clients torrent
  • Ubuntu 20.04 astuces et choses que vous ne savez peut-être pas
  • Comment gérer l'histoire de bash