GNU/Linux >> Tutoriels Linux >  >> Linux

Comment puis-je supprimer tous les fichiers d'un répertoire lorsqu'il signale une liste d'arguments trop longue

Solution 1 :

find . -maxdepth 1 -type f -exec rm -f {} \;

cela prend tout simplement trop de temps (un exec de rm par fichier).

celui-ci est beaucoup plus efficace :

find . -maxdepth 1 -type f -print0 | xargs -r0 rm -f

comme il prend autant de noms de fichiers comme argument de rm que possible, puis exécute rm avec le prochain chargement de noms de fichiers... il peut arriver que rm ne soit appelé que 2 ou 3 fois.

Solution 2 :

Dans le cas où vous ne pouvez pas supprimer le répertoire, vous pouvez toujours utiliser find.

find . -maxdepth 1 -type f -exec rm -f {} \;

Cela supprimera tous les fichiers du répertoire courant, et uniquement le répertoire courant (pas les sous-répertoires).

Solution 3 :

Ces deux solutions contourneront le problème. Il y a une analyse des performances respectives de chaque technique ici.

find . -name WHATEVER -exec rm -rf {} \;

ou

ls WHATEVER | xargs rm -rf

Le problème vient du fait que bash développe "*" avec chaque élément du répertoire. Ces deux solutions fonctionnent à tour de rôle sur chaque fichier.

Solution 4 :

J'ai pu le faire en sauvegardant un niveau :

cd ..

Et en cours d'exécution :

rm directory name -rf

Et puis recréer le répertoire.

Solution 5 :

Toutes ces invocations de find sont très sympas mais je me souviens rarement exactement de la nomenclature nécessaire quand je suis pressé :à la place j'utilise ls. Comme quelqu'un le mentionne, ls . fonctionnerait mais je préfère ls -1 comme dans :

ls -1 | xargs -n 100 rm -rf

Le chiffre -n xxx est assez sûr pour jouer avec car le dépassement du maximum sera automatiquement corrigé (si size-max est dépassé; voir -s ) ou si le args-max pour une application est dépassé, il sera généralement plutôt évident.

Il convient de noter que grep est pratique à insérer au milieu de cette chaîne lorsque vous souhaitez uniquement supprimer un sous-ensemble de fichiers dans un grand répertoire et que vous ne souhaitez pas utiliser find pour une raison quelconque.

Cette réponse suppose que vous utilisez les utilitaires du noyau Gnu pour vos ls, xargs &etc.


Linux
  1. Comment déplacer tous les fichiers (y compris cachés) d'un répertoire à un autre ?

  2. Comment supprimer tous les fichiers avec une extension particulière dans un dossier particulier ?

  3. Impossible de supprimer les fichiers du répertoire avec l'erreur "Liste d'arguments trop longue"

  4. Comment lister récursivement tous les fichiers et répertoires

  5. Erreur de liste d'arguments trop longue pour les commandes rm, cp, mv

Comment déplacer tous les fichiers du répertoire courant vers le répertoire supérieur ?

Comment puis-je lister uniquement les fichiers non vides en utilisant ls ?

Comment puis-je trouver tous les fichiers liés en dur sur un système de fichiers ?

comment puis-je supprimer récursivement des répertoires vides dans mon répertoire personnel ?

Comment puis-je supprimer de manière récursive tous les fichiers et répertoires vides sous Linux ?

Comment lister tous les fichiers d'une partition sous Linux ?