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.
find /yourpath/folder1 -size +1048576 -exec rm -f {} \; &
find /yourpath/folder2 -size +1048576 -exec rm -f {} \; &
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 {} \; &
find yourpath/folder1 -mtime +5 -exec rm {} \;
O
find yourpath/folder2 -mtime +5 |xargs rm
find foldername -exec rm -rf {} \; &