GNU/Linux >> Tutoriels Linux >  >> Linux

Comment supprimer plusieurs dossiers en parallèle ?

Juste au cas où vous voudriez faire plus que supprimer des répertoires en parallèle, vous pouvez faire beaucoup de trucs fantaisistes parallèles avec GNU parallel. Comme il ne s'agit souvent pas d'un utilitaire de base dans les distributions, vous devrez peut-être l'installer à l'aide de votre gestionnaire de packages préféré, par ex. apt-get install parallel .

Mais ensuite, vous pouvez faire des trucs sympas comme celui-ci, disons que vous exécutez 4 processus parallèles, que vous voulez montrer la progression, sans préavis et laisser en parallèle exécuter une commande de veille en attendant 5s, 10s, 15s, 20s chacun.

$ parallel -j 4 --progress --no-notice sleep ::: 5 10 15 20 

Computers / CPU cores / Max jobs to run
1:local / 4 / 4

Computer:jobs running/jobs completed/%of started jobs/Average seconds to complete
local:0/4/100%/5.0s  

Votre exemple fonctionnerait comme ceci :

$ parallel --no-notice rm -rf ::: dir1 dir2 dir3 

N'hésitez pas à consulter le tuto fin.


J'ai dû nettoyer certains dossiers dans /media aussi vite que possible.
La commande suivante a pu supprimer 9T de données sur chacun des 80 disques en environ 5mn

$ sudo find /media -maxdepth 2 -name "data-8" -type d | while read folder; do eval "sudo rm -rf ${folder} &"; done

Cela a lancé 80 parallèles rm -rf en arrière-plan


Exécutez les commandes en arrière-plan

rm -rf dir &; rm -rf dir2 &;

syntaxe

long_command with arguments > redirection &

vous pouvez capturer tous les messages en redirigeant la sortie de la commande vers un fichier.

Ces liens vous aideront ==> http://tldp.org/HOWTO/Bash-Prog-Intro-HOWTO-3.html

Modifier :

Le titre de la question et l'exemple donné donnent l'impression que le problème est très petit. Mais une prime supplémentaire montrant la gravité du problème.

Il serait préférable que vous précisiez la nature de vos fichiers. Cependant, je propose une suppression basée sur le fractionnement qui peut être implémentée en tant qu'exécutions parallèles. Vous pouvez essayer les options ci-dessous en fonction de vos besoins.

  • supprimer des fichiers par taille
  • find /yourpath/folder1 -size +1048576 -exec rm -f {} \; &
    find /yourpath/folder2 -size +1048576 -exec rm -f {} \; &
    

  • supprimer des fichiers par extension
  • trouver les extensions en utilisant la commande ci-dessous
    ls -l /yourpath/folder1 | awk '{print $9}' | awk -F. '{print $(NF)}' |sort |uniq
    

    vous pouvez obtenir un résultat comme

    .txt
    .log
    .tmp
    .zip
    

    maintenant, supprimez les fichiers basés sur les extensions

    find yourpath/folder1 -name '*.txt' -exec rm {} \; &
    find yourpath/folder1 -name '*.tmp' -exec rm {} \; &
    find yourpath/folder1 -name '*.log' -exec rm {} \; &
    find yourpath/folder2 -name '*.txt' -exec rm {} \; &
    find yourpath/folder2 -name '*.tmp' -exec rm {} \; &
    find yourpath/folder2 -name '*.log' -exec rm {} \; &
    

  • suppression de fichiers par heure modifiée
  • La commande ci-dessous essaie de supprimer les fichiers de plus de 5 jours.
    find yourpath/folder1 -mtime +5 -exec rm {} \;
    

    OU

    find yourpath/folder2 -mtime +5 |xargs rm 
    

  • supprimer le dossier et ses sous-dossiers, y compris ses fichiers
  • find foldername -exec rm -rf {} \; &
    


    Linux
    1. Comment supprimer des dossiers avec un certain nom

    2. Comment supprimer un fichier portant ce nom sous Linux :-]???????q

    3. Comment puis-je exécuter plusieurs commandes lors de l'utilisation de find ?

    4. Comment lister les dossiers à l'aide des commandes bash ?

    5. Comment supprimer un fichier avec un nom bizarre ?

    Comment trouver et supprimer des liens symboliques brisés sous Linux

    Comment trouver une adresse IP sous Linux

    Comment trouver le nom d'hôte sous Linux

    Comment rechercher et supprimer des répertoires vides sous Linux

    Comment supprimer plusieurs lignes dans Vim

    Comment trouver des dossiers sous Linux