Loop para aplicar o comando a 300 arquivos em um diretório e renomear a saída incluindo o nome do arquivo de entrada original mais o novo texto

1

Eu tenho um código que é svr_vars. Eu tenho um diretório com 300 arquivos diferentes. Eu quero fazer um loop e executar o código em cada arquivo no diretório. O código svr_vars gera um nome de arquivo genérico de svr_vars.txt. Portanto, toda vez que o código é executado, ele sobrescreve o nome do arquivo svr_vars.txt. Então, ele precisa ser renomeado após cada execução do código.

1995051200_72259.txt < = como se parece um arquivo no diretório

Eu quero que a saída seja renomeada de svr_vars.txt para svr.1995051200_72259.txt

    
por Zoe 25.08.2016 / 19:46

1 resposta

3

Se eu entendi a pergunta corretamente, você basicamente faz

svr_vars 1995051200_72259.txt

e o programa gera uma saída chamada svr_vars.txt e você deseja que isso seja renomeado para svr.1995051200_72259.txt

Supondo que todos os 300 arquivos começam com um número e terminam em .txt , você pode fazer um loop semelhante a

#!/bin/bash
for file in [1-9]*.txt
do
  svr_vars "$file"
  mv svr_vars.txt "svr.$file"
done

Podemos adicionar algumas verificações de integridade a esse loop para fazer com que ele seja abortado se as coisas não funcionarem corretamente. eg

#!/bin/bash
for file in [1-9]*.txt
do
  if [ -e "svr.$file" ]
  then
    echo "$file already processed.  skipping"
  else
    svr_vars "$file"
    if [ ! -e svr_vars.txt ]
    then
      echo "Failed to create results for $file"
    else
      mv svr_vars.txt "svr.$file"
    fi
  fi
done
    
por 25.08.2016 / 19:57