linux:bash:parallel

parallel (bash)

  • GNU Parallel actúa como un director de orquesta. No solo lanza los procesos, sino que los gestiona para que no colapsen el sistema:
    • Gestión de carga: Si un proceso termina, lanza el siguiente inmediatamente.
    • Orden de salida: Evita que los mensajes de error o logs de diferentes sujetos se mezclen de forma caótica en la terminal.
    • Uso de memoria: Puedes limitarlo para que no sature la RAM (vital en MRI, donde cada imagen cargada consume mucho).
sudo apt install parallel
  • -j <núcleos>: número de núcleos máximos a usar
  • --progress: muestra progreso
  • --load X%: máximo nivel de carga de la CPU antes de lanzar otro proceso
  • --memfree XG: mínimo de memoria libre antes de lanzar otro proceso
  • --dry-run: simulación de ejecución
  • --eta: tiempo estimado de finalización basado en los ya ejecutados
  • --joblog: crea un archivo de registro. Permite continuar el trabajo si se acabó inesperadamente.
  • {}: comodín
  • {.}: nombre archivo sin extensión
  • {/}: nombre de archivo sin ruta
  • {//}: la ruta de la carpeta sin archivo
  • {/:.}: nombre del archivo sin la ruta y sin extensión
  • :::: lista de parámetros
  • {#}: número de orden del proceso.
  • compresión ficheros nii por separado:
    parallel gzip {} ::: *.nii
  • #!/usr/bin/env bash
    time ls *.nii.gz | parallel -j 8 --progress "echo Procesando {}; sleep 3"
  • #!/usr/bin/env bash
     
    #Fitxer 1 per executar el FreeSurfer per les imatges estructurals T1
     
    # directori d'entrada
    export SUBJECTS_INPUT_DIR=/media/analysis/usr/akaruk/ENIGMA/enigma_scz/project_81/execucio_freesurfer/input/
     
    # on aniran els outputs, necessari mantenir nom per recon-all
    export SUBJECTS_DIR=/media/analysis/usr/akaruk/ENIGMA/enigma_scz/project_81/freesurfer_output/
     
    # fitxer de subjectes
    export SUBJECTS=/media/analysis/usr/akaruk/ENIGMA/enigma_scz/project_53/informacio_participants/participants.txt
     
    time cat $SUBJECTS | parallel -j 4 --progress "recon-all -i ${SUBJECTS_INPUT_DIR}{}.nii.gz -s {} -all"
     
    exit 0
    for CODE in $(cat /media/analysis/usr/akaruk/ENIGMA/enigma_scz/project_81/execusio_freesurfer//InputFreeSurfer1.txt);
    do
         recon-all -i /media/analysis/usr/akaruk/ENIGMA/enigma_scz/project_81/execusio_freesurfer/input//$CODE.nii.gz -s $CODE -all 
    done  
  • #!/usr/bin/env bash
     
    function retallaPath() {
    # 1. Extraemos el nombre del archivo eliminando la ruta
        local nombre="${1##*/}"
     
        # 2. Eliminamos la extensión .zip y devolvemos el resultado
        echo "${nombre%.zip}"
    }
     
    function unzipMove() {
        PASSWORD_ZIP="Boo5eigh"
     
        fitxer=$(retallaPath $1)
        echo "Procesando $fitxer"; 
        unzip -d ./tmp -o -P $PASSWORD_ZIP "$1"
        mv ./tmp/*.xls ./unZIPs/$fitxer.xls
     
    }
     
    export -f unzipMove retallaPath
     
    time ls ./ZIPs/*.zip | parallel -j 4 --progress "unzipMove {}"
     
    exit 0
     
    time for f in ./ZIPs/*.zip; do
        fitxer=$(retallaPath $f)
        echo "Procesando $fitxer"; 
        unzip -d ./tmp -o -P $PASSWORD_ZIP "$f"
        mv ./tmp/*.xls ./unZIPs/$fitxer.xls
    done
  • #!/usr/bin/env bash
     
    execucio_bianca() {
     
        local sujeto=$1
     
       echo "Procesando $sujeto"
     
      #  sleep .1 # treure!!!
     
     #   exit    # treure!!!
     
        bianca \
        --singlefile=masterfile.txt \
        --trainingnums=1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20 \
        --labelfeaturenum=4 \
        --querysubjectnum=${sujeto} \
        --brainmaskfeaturenum=1 \
        --featuresubset=1,2 \
        --matfeaturenum=3 \
        --trainingpts=2000 \
        --nonlespts=10000 \
        --selectpts=noborder \
        -o resultados/s_${sujeto}_bianca_output \
        -v 
        > logs/sub_${sujeto}.log 2>&1
    }
     
    mkdir -p resultados
    mkdir -p logs
     
    export -f execucio_bianca
     
    time parallel -j 16 --progress execucio_bianca {} ::: {21..315}
     
    # INICIO=21
    # FIN=315
    # time seq $INICIO $FIN | parallel -j 4 --progress "echo Procesando {}; sleep .5
  • linux/bash/parallel.txt
  • Darrera modificació: 08/05/2026 04:29
  • per mate