Copia vários arquivos de diretórios diferentes enquanto renomeia?

0

Eu tenho vários arquivos para copiar de vários diretórios, mas cada arquivo tem o mesmo nome, então eu preciso copiá-los para um único diretório e renomear cada um por sua vez como "expect1, expect2, expect3", etc. O código que eu tentei até agora é

     let i=1; for file in delay* ; do (
     cd $file
     cp expectation_file ~/target_dir
     cd ~/target_dir/
     mv expectation_file expect{i}
     ((i++)) );
     done

Mas isso faz com que todos os arquivos sejam chamados de "expect1". Alguém pode ajudar? Eu acho que é o loop de contagem que está errado, mas não consigo descobrir. Obrigado!

EDIT: Cometeu um erro no código lá. Tinha 1 = 1 em vez de i = 1 e, em seguida, ++ i não i ++.

    
por J Moore 27.03.2017 / 18:48

1 resposta

0

Isso pode ser mais versátil.

#!/bin/bash
i=0
source_files=$(find /tmp -name "*.zip")
target_dir=~/temp1/
for source in ${source_files}; do
  ((i++))
  mv ${source} ${target_dir}/$(basename ${source})${i}
done

expressão source_files pode ser qualquer coisa como $ (ls * .zip), este exemplo encontra todos os arquivos zip em / tmp /.

    
por 27.03.2017 / 19:39

Tags