GNU/Linux >> Tutoriels Linux >  >> Linux

Comment réparer /bin/rm :impossible d'exécuter [Liste d'arguments trop longue]

La commande rm est utilisé sous Linux pour supprimer des fichiers et des répertoires. Il peut être utilisé pour supprimer quelques fichiers en spécifiant chaque nom de fichier, ou il peut être utilisé avec le -r argument (récursif ) pour supprimer un répertoire et toute l'arborescence de répertoires qui se trouve en dessous.

La syntaxe à utiliser pour la commande rm est :

$ rm <file1> <file2> ... <fileN> 
$ rm -r <directory1> <directory2> ... <directoryN> <target_directory>

Supprimer des fichiers et des répertoires sous Linux

Ces syntaxes peuvent également être combinées pour supprimer des fichiers et des répertoires en une seule fois :

$ rm -r file1 file2 file3 directory1 directory2

Vous pouvez également spécifier des noms de fichiers et de répertoires avec des caractères génériques, si les noms sont similaires, c'est-à-dire qu'ils commencent, finissent ou contiennent le même modèle dans leur nom. Ceci est particulièrement utile lorsqu'un grand nombre de fichiers de la même extension de fichier doivent être supprimés.

Par exemple, pour supprimer tous les fichiers dont le nom de fichier commence par la chaîne 'fichier ', nous pouvons exécuter :

$ rm file*

De même, pour supprimer tous les fichiers avec l'extension '.txt' , nous pouvons exécuter :

$ rm *.txt

Fondamentalement, ce que font les caractères génériques :placez tous les fichiers ou répertoires qui satisfont le modèle de caractères génériques en tant qu'arguments de rm . Ainsi, théoriquement, il n'y a pas de limite au nombre d'arguments pour rm commande.

Suppression d'un grand nombre de fichiers :erreur "Liste d'arguments trop longue"

Même si théoriquement "rm ' il n'y a pas de limite sur le nombre d'arguments, il y a une limite prédéfinie sur le nombre maximum d'arguments avec lesquels une seule commande peut fonctionner.

Il s'agit d'une limite définie dans le système Linux et basée sur la taille de la pile du système. Par conséquent, si un modèle générique place des dizaines de milliers de fichiers ou de répertoires en arguments, le programme génère une erreur :"Liste d'arguments trop longue ".

Prenons l'exemple d'un dossier contenant environ 2,5 lacs (250K ) fichiers.

$ ls -l | wc -l
$ ls | head

Essayons de les supprimer avec un caractère générique.

$ rm file*

Ainsi, il donne l'erreur susmentionnée. Voyons maintenant comment résoudre cette erreur.

Solution :utilisez la commande Rechercher avec l'argument "-exec" pour supprimer des milliers de fichiers

La commande find recherche essentiellement des fichiers dans des répertoires en fonction de différents paramètres, tels que le modèle de nom de fichier, l'extension de fichier, etc.

Ensuite, nous utilisons le '-exec' paramètre de ‘trouver‘ qui vous permettra d'exécuter n'importe quelle commande sur la sortie de find .

$ find . -maxdepth 1 -name "<filename_pattern>" -exec rm -r {} \;

Ici, le premier argument, '.' (répertoire courant) est le répertoire où trouver les fichiers. Si des fichiers d'un autre répertoire doivent être supprimés, vous devez spécifier ici le chemin d'accès à ce répertoire.

L'argument '-maxdepth 1' ne considère que les fichiers et répertoires du répertoire courant. Sans spécifier cette profondeur, la commande find parcourra inutilement tous les sous-répertoires.

L'argument "-name" est utilisé pour rechercher des fichiers et des répertoires avec un modèle de chaîne. Le 'filename_pattern ' spécifie le modèle de chaîne. Ensuite, nous spécifions le ‘rm -r‘ commande après un argument '-exec' .

Les parenthèses ouvertes '{ }' sont un espace réservé pour l'argument qui doit être utilisé à partir de la sortie de find.

$ find . -maxdepth 1 -name "file*" -exec rm -r {} \;

Comme nous pouvons le voir, tous les fichiers ont été supprimés. La même commande peut être utilisée pour supprimer des répertoires en bloc, car nous passons déjà le '-r' arguments.

Conclusion

Dans cet article, nous avons découvert la commande commande rm et comment le problème "Liste d'arguments trop longue ' peut être traité en utilisant 'rm' combiné avec le 'trouver ‘ commande.

Si vous avez des commentaires ou des questions, faites-le nous savoir dans les commentaires ci-dessous !


Linux
  1. Comment réparer '/usr/bin/dirmngr' :aucun fichier ou répertoire de ce type

  2. Comment Linux gère-t-il plusieurs séparateurs de chemins consécutifs (/home////nom d'utilisateur///fichier) ?

  3. Comment faire écho à un coup ! ?

  4. Comment provoquer l'erreur "Liste d'arguments trop longue" ?

  5. Pourquoi /bin/sh pointe-t-il vers /bin/dash et non /bin/bash ? ?

Comment exécuter les fichiers .bin et .run dans Debian

Comment exécuter des fichiers .bin et .run dans Ubuntu

Comment réparer ce gâchis apt?

Déplacement du contenu de /bin vers /usr/bin, possible d'annuler ?

Les sites Web doivent-ils vivre dans /var/ ou /usr/ selon l'utilisation recommandée ?

#!/bin/sh vs #!/bin/bash pour une portabilité maximale