Resposta curta
while IFS=$'\t' read -r old new; do cat folder*/"$old" > merged/"$new"; done <list.tsv
Isso pressupõe que list.tsv contenha uma lista delimitada por tabulações de arquivos de origem (antigos) e de destino (novos).
Explicação
-
while IFS=$'\t' read -r old new; FOO; done <list.tsv: esta é uma construção de shell comum para ler cada linha delist.tsve, em seguida,FOOem cada linha. Nesse caso, o separador do arquivo de entradaIFSé uma guia$'\t', ou seja, o primeiro campo da linha é salvo em$olde o segundo campo (após a guia) é salvo em$new. -
cat folder*/"$old" > merged/"$new": concatene os arquivos emfolder*/"$old"e grave isso emmerged/"$new". Isso pressupõe que os arquivos de origem estejam todos emfolder*, por exemplo, chamadofolder1,folder2, etc. - Como acontece com qualquer script, eu certamente testaria isso antes de executá-lo. Você pode fazer isso copiando um subconjunto de seus arquivos para outro diretório e, em seguida, usando uma versão curta de sua lista de entrada
list.tsv. Verifique os resultados e, se estiver bem, execute-o para valer (mas mantenha um backup!).
Notas sobre sua solução sugerida
Eu apenas pensei em escrever alguns comentários sobre sua solução proposta, a fim de esclarecer como os vários comandos funcionam. Espero que isso seja útil para sua compreensão!
-
%código%. Isso cria uma matriz. A maneira de acessar partes dela é mostrada aqui . Usar
listA=( old1 old2 old3 etc.)apenas acessará a primeira entrada, como você observou (de certa forma). -
%código%. Isso itera sobre
for i in $listA…,for i in a b cea, colocando cada um emb. Por exemplo, tente executarc. N.B. Não faz sentido se referir a$identro do blocofor i in a b c; do echo $i; done. Da mesma forma,$listAedo…donesão inconsistentes comi=0de uso. -
%código%.
((i=+1))é desnecessário.foré a pasta atual, por isso não faz nada aqui. -
%código%.
./folder1/$listAse concatenará sozinho (daí o nome). Não há necessidade de escrever instruções./separadas que anexam.a um arquivo. Você pode apenas listar vários arquivos depois decat FOO >>, por exemplocat.