En caso de que quiera hacer algo más que eliminar directorios en paralelo, puede hacer muchas cosas sofisticadas en paralelo con GNU paralelo. Como a menudo no es una utilidad básica en las distribuciones, es posible que deba instalarlo utilizando su administrador de paquetes favorito, p. apt-get install parallel
.
Pero luego, puede hacer cosas geniales como esta, digamos que ejecuta 4 procesos paralelos, quiere mostrar el progreso, sin avisos molestos y deja que en paralelo ejecute un comando de suspensión esperando 5 s, 10 s, 15 s, 20 s cada uno.
$ 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
Su ejemplo se ejecutaría así:
$ parallel --no-notice rm -rf ::: dir1 dir2 dir3
Siéntase libre de consultar el excelente tutorial.
Tuve que limpiar algunas carpetas en /media lo más rápido posible.
El siguiente comando pudo eliminar 9T de datos en cada uno de los 80 discos en aproximadamente 5mn
$ sudo find /media -maxdepth 2 -name "data-8" -type d | while read folder; do eval "sudo rm -rf ${folder} &"; done
Esto pateó 80 paralelos rm -rf
en el fondo
Ejecute los comandos en segundo plano
rm -rf dir &; rm -rf dir2 &;
sintaxis
long_command with arguments > redirection &
puede capturar cualquier mensaje redirigiendo la salida del comando a un archivo.
Estos enlaces ayudarán ==> http://tldp.org/HOWTO/Bash-Prog-Intro-HOWTO-3.html
Editar:
El título de la pregunta y el ejemplo dado dan la impresión de que el problema es muy pequeño. Pero una recompensa adicional que muestra la gravedad del problema.
Sería mejor si especifica la naturaleza de sus archivos. Sin embargo, estoy proporcionando una eliminación basada en división que puede implementarse como ejecuciones paralelas. Puede probar las siguientes opciones según sus requisitos.
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
puede obtener un resultado como
.txt
.log
.tmp
.zip
ahora, elimine los archivos según las extensiones
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 {} \; &