GNU/Linux >> Tutoriels Linux >  >> Linux

Supprimer des milliards de fichiers d'un répertoire tout en voyant la progression également ?

J'ai un répertoire de 30 To contenant des milliards de fichiers qui sont formellement tous des fichiers JPEG. Je supprime chaque dossier de fichiers comme ceci :

sudo rm -rf bolands-mills-mhcptz

Cette commande s'exécute simplement et n'affiche rien, qu'elle fonctionne ou non.

Je veux voir comment il supprime des fichiers ou quel est l'état actuel de la commande.

Réponse acceptée :

Vous pouvez utiliser rm -v avoir rm imprimer une ligne par fichier supprimé. De cette façon, vous pouvez voir que rm travaille en effet pour supprimer des fichiers. Mais si vous avez des milliards de fichiers, tout ce que vous verrez, c'est que rm fonctionne toujours. Vous n'aurez aucune idée du nombre de fichiers déjà supprimés et du nombre restant.

L'outil pv peut vous aider avec une estimation des progrès.

http://www.ivarch.com/programs/pv.shtml

Voici comment invoquer rm avec pv avec exemple de sortie

$ rm -rv dirname | pv -l -s 1000 > logfile
562  0:00:07 [79,8 /s] [====================>                 ] 56% ETA 0:00:05

Dans cet exemple artificiel, j'ai dit pv qu'il y a 1000 des dossiers. La sortie de pv montre que 562 sont déjà supprimés, le temps écoulé est de 7 secondes et l'estimation pour terminer est de 5 secondes.

Quelques explications :

  • pv -l fait pv compter par nouvelle ligne au lieu d'octets
  • pv -s number indique pv quel est le total pour qu'il puisse vous donner une estimation.
  • La redirection vers logfile à la fin est pour une sortie propre. Sinon la ligne d'état de pv se confond avec la sortie de rm -v . Bonus :vous aurez un fichier journal de ce qui a été supprimé. Mais attention, le fichier va devenir énorme. Vous pouvez également rediriger vers /dev/null si vous n'avez pas besoin d'un journal.

Pour obtenir le nombre de fichiers, vous pouvez utiliser cette commande :

$ find dirname | wc -l

Cela peut également prendre beaucoup de temps s'il y a des milliards de fichiers. Vous pouvez utiliser pv ici aussi pour voir combien ça a compté

$ find dirname | pv -l | wc -l
278k 0:00:04 [56,8k/s] [     <=>                                              ]
278044

Ici, il est dit qu'il a fallu 4 secondes pour compter 278 000 fichiers. Le décompte exact à la fin (278044 ) est la sortie de wc -l .

Si vous ne voulez pas attendre le décompte, vous pouvez soit deviner le nombre de fichiers, soit utiliser pv sans estimation :

$ rm -rv dirname | pv -l > logfile

Comme ça vous n'aurez aucune estimation pour finir mais au moins vous verrez combien de fichiers sont déjà supprimés. Rediriger vers /dev/null si vous n'avez pas besoin du fichier journal.

En relation :Comment ajouter des données au tampon dans un script shell ?

Pique-nique :

  • avez-vous vraiment besoin de sudo ?
  • habituellement rm -r suffit de supprimer récursivement. pas besoin de rm -f .

Linux
  1. Gérez le répertoire Linux /tmp comme un pro

  2. Comment utiliser Wget pour télécharger récursivement des fichiers depuis un répertoire web ?

  3. Comment obtenir un nombre de fichiers dans un répertoire à l'aide de la ligne de commande ?

  4. Comment déplacer des fichiers et afficher la progression (par exemple avec une barre de progression) ?

  5. Comment identifier l'utilisateur qui supprime des fichiers d'un répertoire donné sous Linux

Comment rechercher des fichiers à partir du terminal sous Linux

Comment exclure un répertoire lors de la recherche de fichiers sous Linux

Examen des fichiers Berkeley DB à partir de la CLI

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

Où est le répertoire temporaire sous Linux ?

Recherche des fichiers qui utilisent le plus d'espace disque