GNU/Linux >> Linux Esercitazione >  >> Linux

Come eliminare più cartelle in parallelo?

Nel caso in cui tu voglia fare di più che rimuovere le directory in parallelo, puoi fare un sacco di cose fantasiose in parallelo con GNU parallel. Poiché spesso non è un'utilità di base nelle distribuzioni, potrebbe essere necessario installarla utilizzando il gestore di pacchetti preferito, ad es. apt-get install parallel .

Ma poi, puoi fare cose interessanti come questa, diciamo che esegui 4 processi paralleli, vuoi mostrare i progressi, nessun avviso fastidioso e lasciare che in parallelo esegua un comando sleep in attesa di 5 secondi, 10 secondi, 15 secondi, 20 secondi ciascuno.

$ 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  

Il tuo esempio funzionerebbe in questo modo:

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

Sentiti libero di consultare il bel tutorial.


Ho dovuto ripulire alcune cartelle in /media il più velocemente possibile.
Il seguente comando è stato in grado di eliminare 9 T di dati su ciascuno degli 80 dischi in circa 5 minuti

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

Questo ha dato il via a 80 rm -rf paralleli sullo sfondo


Esegui i comandi in background

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

sintassi

long_command with arguments > redirection &

puoi acquisire qualsiasi messaggio reindirizzando l'output del comando su un file.

Questi link ti aiuteranno ==> http://tldp.org/HOWTO/Bash-Prog-Intro-HOWTO-3.html

Modifica :

Il titolo della domanda e l'esempio fornito danno l'impressione che il problema sia molto piccolo, ma un ulteriore vantaggio che mostra la gravità del problema.

Sarebbe meglio se specificassi la natura dei tuoi file. Tuttavia, sto fornendo alcune eliminazioni basate su suddivisioni che possono essere implementate come esecuzioni parallele. Puoi provare le seguenti opzioni in base alle tue esigenze.

  • eliminazione di file per dimensione
  • find /yourpath/folder1 -size +1048576 -exec rm -f {} \; &
    find /yourpath/folder2 -size +1048576 -exec rm -f {} \; &
    

  • eliminazione di file per estensione
  • trova le estensioni usando il comando seguente
    ls -l /yourpath/folder1 | awk '{print $9}' | awk -F. '{print $(NF)}' |sort |uniq
    

    potresti ottenere risultati come

    .txt
    .log
    .tmp
    .zip
    

    ora, elimina i file basati sulle estensioni

    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 {} \; &
    

  • eliminazione dei file in base all'ora di modifica
  • il comando seguente tenta di eliminare i file più vecchi di 5 giorni.
    find yourpath/folder1 -mtime +5 -exec rm {} \;
    

    O

    find yourpath/folder2 -mtime +5 |xargs rm 
    

  • eliminazione della cartella e delle sue sottocartelle inclusi i suoi file
  • find foldername -exec rm -rf {} \; &
    


    Linux
    1. Come rinominare più file usando Trova?

    2. Come trovare più stringhe nei file??

    3. Come posso eliminare le cartelle usando regex dal terminale Linux

    4. Come elencare le cartelle usando i comandi bash?

    5. Come eliminare un file con un nome strano?

    Come trovare ed eliminare i collegamenti simbolici interrotti in Linux

    Come trovare l'indirizzo IP in Linux

    Come trovare il nome host in Linux

    Come trovare ed eliminare directory vuote in Linux

    Come eliminare più righe in Vim

    Come trovare le cartelle in Linux