Bash shell para o processo de loop com dois nomes de variáveis emparelhados

1

É comum usar o shell bash, por exemplo, para renomear arquivos em massa. Normalmente eu usei a seguinte estrutura,

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

Isso é para o nome do arquivo com extensão .short. Mas, agora, como processar com dois ou mais nomes de variáveis (neste caso, extensão de arquivo) no comando? Eu gostaria de fazer o processo em massa para o seguinte 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

Nesse caso, tenho .short e .mcep que desejo processar simultaneamente. Eu uso a lógica e (& amp; & amp;) mas não funcionou,

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

Qualquer programador experiente e experiente quer compartilhar como resolver isso? Eu tenho a ideia de usar loops aninhados, mas não sei como implementado no Bash.

    
por bagustris 04.06.2015 / 02:16

3 respostas

0
#!/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
    
por bagustris 04.06.2015 / 06:10
1

Você pode percorrer o * .shorts e verificar os arquivos * .mcep correspondentes com:

#!/bin/bash

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

Eu apenas ecoei os nomes * .short e * .mcep aqui, mas agora você pode usá-los em comandos.

    
por Julian Stirling 04.06.2015 / 03:43
1

Você pode 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
    
por Rumesh 04.06.2015 / 04:32