Eu não sei qual é o cat
, mas aqui está uma solução que quase funciona
- Em uma execução de terminal
mkfifo myfifo; tail -c +1 -f myfifo | tar xfJ -
- Insira o primeiro DVD na unidade de DVD-ROM (ex. dev / sr0).
- Em uma segunda execução de terminal
dd if=/dev/sr0 of=myfifo
- Quando
dd
for concluído, remova o DVD. - 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.
- No primeiro terminal, pressione CTRL-C para eliminar
tail
etar
.
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.