Tengo dos directorios en el mismo nivel y puedo hacer:
rm -rf dir1/; rm -rf dir2/pero se ejecutarán secuencialmente, ¿cómo podría eliminarlos en paralelo? ¿Existe también una solución genérica que me permita extenderme a muchas carpetas?
Actualizar
Los directorios pueden estar profundamente anidados y contener otros directorios y así sucesivamente.
Ejecutar 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
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 |uniqpuede obtener un resultado como
.txt .log .tmp .zipahora, 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 {} \; &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, por ejemplo, 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.0sSu ejemplo se ejecutaría así:
$ parallel --no-notice rm -rf ::: dir1 dir2 dir3Siéntase libre de consultar el buen 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 rm -rf paralelos en el fondo