GNU/Linux >> Tutoriales Linux >  >> Linux

¿Cómo eliminar varias carpetas en paralelo?

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.

  • eliminar archivos por tamaño
  • find /yourpath/folder1 -size +1048576 -exec rm -f {} \; &
    find /yourpath/folder2 -size +1048576 -exec rm -f {} \; &
    

  • eliminar archivos por extensión
  • encuentre extensiones usando el siguiente comando
    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 {} \; &
    

  • eliminar archivos por hora modificada
  • El siguiente comando intenta eliminar archivos con más de 5 días de antigüedad.
    find yourpath/folder1 -mtime +5 -exec rm {} \;
    

    O

    find yourpath/folder2 -mtime +5 |xargs rm 
    

  • eliminar carpeta y sus subcarpetas, incluidos sus archivos
  • find foldername -exec rm -rf {} \; &
    


    Linux
    1. Cómo encontrar y eliminar directorios y archivos vacíos en Linux

    2. ¿Cómo elimino carpetas usando expresiones regulares desde la terminal de Linux?

    3. Cómo eliminar carpetas con un nombre determinado

    4. Cómo eliminar un archivo con este nombre en Linux:-]???????q

    5. ¿Cómo ejecuto múltiples comandos cuando uso find?

    Cómo encontrar y eliminar enlaces simbólicos rotos en Linux

    Cómo encontrar la dirección IP en Linux

    Cómo encontrar el nombre de host en Linux

    Cómo encontrar y eliminar directorios vacíos en Linux

    Cómo eliminar varias líneas en Vim

    Cómo encontrar carpetas en Linux