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.tsv
e, em seguida,FOO
em cada linha. Nesse caso, o separador do arquivo de entradaIFS
é uma guia$'\t'
, ou seja, o primeiro campo da linha é salvo em$old
e 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 c
ea
, colocando cada um emb
. Por exemplo, tente executarc
. N.B. Não faz sentido se referir a$i
dentro do blocofor i in a b c; do echo $i; done
. Da mesma forma,$listA
edo…done
são inconsistentes comi=0
de uso. -
%código%.
((i=+1))
é desnecessário.for
é a pasta atual, por isso não faz nada aqui. -
%código%.
./folder1/$listA
se 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
.