Dividir e mesclar - com DVDs!

2

Digamos que eu tenha um arquivo grande chamado foo.tar.xz . Eu divido o arquivo em partes de pouco menos de 4,7 GB cada, usando split -b 4689887232 foo.tar.xz foo.tar.xz. , o que me dá arquivos chamados foo.tar.xz.aa , foo.tar.xz.ab , etc. Em seguida, escrevo cada arquivo em um DVD diferente e o envio para Alice usando um pombo-correio bastante grande.

Agora, Alice poderia inserir cada DVD, copiar cada arquivo para seu PC e usar cat e xz para obter o conteúdo de foo : cat foo.tar.xz.* | tar xfJ -

Agora, suponha que Alice tenha espaço suficiente no PC para armazenar o conteúdo extraído de foo . Existe algum sabor de cat que irá ler esses arquivos diretamente de DVDs e pausar o fluxo para permitir que ela insira o próximo DVD? Algo como pausecat ou volumecat ?

    
por rudolfbyker 09.05.2018 / 22:41

2 respostas

2

Eu não sei qual é o cat , mas aqui está uma solução que quase funciona

:

  1. Em uma execução de terminal mkfifo myfifo; tail -c +1 -f myfifo | tar xfJ -
  2. Insira o primeiro DVD na unidade de DVD-ROM (ex. dev / sr0).
  3. Em uma segunda execução de terminal dd if=/dev/sr0 of=myfifo
  4. Quando dd for concluído, remova o DVD.
  5. Se você tiver outro DVD, insira-o na unidade de DVD-ROM e vá para a etapa 3, caso contrário, vá para a etapa 6.
  6. No primeiro terminal, pressione CTRL-C para eliminar tail e tar .

Como funciona

O truque é usar tail para ler continuamente de um pipe nomeado. A saída de tail é então canalizada para o comando que você deseja executar. Inicialmente o tubo é fechado, então nada acontece. Mas quando você começa a bombear dados para o pipe com dd , tail o pega e encaminha para o seu comando.

A mágica acontece quando o fluxo de dados para o pipe é interrompido: tail mantém seu descritor de arquivo aberto, o que faz com que seu comando pause. Enquanto isso, tail simplesmente espera por mais informações.

O problema

O motivo pelo qual eu disse que está quase funcionando é porque parece haver um problema de buffering que faz com que tail não grave o último bit de dados inserido nele. Minha esperança é que alguém possa fornecer o insight para resolver isso.

    
por 10.05.2018 / 01:21
2

Você pode escrever seu próprio script catpause :

#!/bin/bash
while read -p 'ready ? ' >&2
do if [ y = "$REPLY" ]
   then cat /dev/dvd 
   fi
done |
tar xJf -

Ele solicita que você responda stderr e, se for y , você copiará o dvd em um canal lido pelo comando tar . Quando terminar, digite control-D para o fim do arquivo.

    
por 10.05.2018 / 11:20

Tags