É provável que o gargalo esteja lendo a unidade de DVD, portanto, devemos garantir a leitura apenas uma vez ou a leitura duas vezes, mas em intervalos suficientemente próximos de forma que os dados ainda estarão no cache. O último parece difícil, então vamos pelo primeiro.
Precisamos ter um duplicador em algum lugar. Se restringirmos aos comandos básicos do shell, a única opção é tee
. Portanto, precisamos converter a entrada (uma árvore de arquivos) em um fluxo, alimentar o fluxo em tee
e converter cada fluxo de saída de volta em uma árvore de arquivos. A ferramenta para fazer isso é um arquivador. A compressão em algo que permanecerá na memória é um desperdício, então vamos usar apenas tar
.
Pipes ( command0 | command1
) nos permitem alimentar a saída de um comando em um outro comando. Precisamos alimentar a saída de tee
em dois outros comandos, então outra construção bash é útil: command1 >(command2)
cria um canal que é passado para command1
como seu primeiro comando, em vez de se tornar a saída padrão de command2
. (Procure a substituição do processo no manual do bash).
Aqui está o comando (não testado):
mkdir /media/disk0/copy_of_dvd /media/disk1/copy_of_dvd
cd /media/cdrom
tar cf - . | tee >(tar xf - -C /media/disk0/copy_of_dvd) | tar xf - -C /media/disk1/copy_of_dvd