Bash shell para proceso de bucle con dos nombres de variables emparejadas

Bash shell para proceso de bucle con dos nombres de variables emparejadas

Es común usar bash shell, por ejemplo, para cambiar el nombre de muchos archivos de forma masiva. Normalmente utilicé la siguiente estructura,

for file in ./*.short
do
# do command
done

Eso es para nombres de archivos con extensión .short. Pero, ahora, ¿cómo procesar con dos o más nombres de variables (en este caso, extensión de archivo) en el comando? Me gustaría realizar un proceso masivo para el siguiente comando,

( x2x +sf < data.short | frame -l 400 -p 80 | \
bcut +f -l 400 -s 65 -e 65 |\
window -l 400 -L 512 | spec -l 512 |\
glogsp -l 512 -x 8 -p 2 ;\
\
bcut +f -n 20 -s 65 -e 65 < data.mcep |\
mgc2sp -m 20 -a 0.42 -g 0 -l 512 | glogsp -l 512 -x 8 ) | xgr

En ese caso tengo .short y .mcep que quiero procesar al mismo tiempo. Yo uso elylógica (&&) pero no funcionó,

for file1 in ./*.short && ./*.mcep
do
# $file1 and file2 process
done

¿Algún programador de shell experimentado y capacitado quiere compartir cómo resolver esto? Tengo idea de utilizar bucles anidados, pero no sé cómo implementarlos en Bash.

Respuesta1

Puede recorrer los *.shorts y luego buscar los archivos *.mcep correspondientes con:

#!/bin/bash

for i in *.short
do
   base=${i%%?????}
   if [ -e ${base}mcep ]
   then
      echo ${base}.short
      echo ${base}.mcep
   fi
done

Acabo de repetir los nombres *.short y *.mcep aquí, pero ahora puedes usarlos en los comandos.

Respuesta2

Puedes usar este script

#!/bin/bash

for file1 in /path/to/files/*
do
    ext=${file#*.}

    if [[ "$ext" == "mcep" ]]
    then 
        #command to run on files with 'mcep' extension
    elif [[ "$ext" == "short" ]]
    then
        #command to run on files with 'short' extension
    fi
done

Respuesta3

#!/bin/bash

for file in ./*.short 
do
(x2x +sf < $file | frame -l 400 -p 80 | 
bcut +f -l 400 -s 65 -e 65 |
window -l 400 -L 512 | spec -l 512 |
glogsp -l 512 -x 8 -p 2 ;\

bcut +f -n 20 -s 65 -e 65 < ${file%.short}.mcep |\
mgc2sp -m 20 -a 0.42 -g 0 -l 512 | glogsp -l 512 -x 8 ) | psgr > ${file%.short}.eps
done

información relacionada