GNU/Linux >> Linux Esercitazione >  >> Linux

Dividi e unisci – Con i DVD!?

Supponiamo di avere un file di grandi dimensioni chiamato foo.tar.xz .
Ho diviso il file in parti di poco meno di 4,7 GB ciascuna, utilizzando split -b 4689887232 foo.tar.xz foo.tar.xz. , che mi dà file chiamati foo.tar.xz.aa , foo.tar.xz.ab , ecc.
Quindi scrivo ogni file su un DVD diverso e lo mando ad Alice usando un piccione viaggiatore piuttosto grande.

Ora Alice potrebbe inserire ogni DVD, copiare ogni file sul suo PC e quindi usare cat e xz per ottenere il contenuto di foo :cat foo.tar.xz.* | tar xfJ -

Ora supponi che Alice abbia abbastanza spazio sul suo PC per memorizzare i contenuti estratti di foo . C'è qualche sapore di cat che leggerà questi file direttamente dai DVD e metterà in pausa lo streaming per consentirle di inserire il DVD successivo? Qualcosa come pausecat o volumecat ?

Risposta accettata:

Non conosco un simile cat sapore, ma ecco una soluzione che quasi funziona:

  1. In un terminale esegui mkfifo myfifo; tail -c +1 -f myfifo | tar xfJ -
  2. Inserisci il primo DVD nell'unità DVD-ROM (es. dev/sr0).
  3. In un secondo terminale esegui dd if=/dev/sr0 of=myfifo
  4. Quando dd completa, rimuovi il DVD.
  5. Se hai un altro DVD, inseriscilo nell'unità DVD-ROM e vai al passaggio 3, altrimenti vai al passaggio 6.
  6. Nel primo terminale, premi CTRL-C per uccidere tail e tar .

Come funziona

Il trucco è usare tail per leggere continuamente da una named pipe. L'output di tail viene quindi reindirizzato al comando che si desidera eseguire. Inizialmente il tubo non è aperto quindi non succede nulla. Ma quando inizi a pompare i dati nella pipe con dd , tail lo raccoglie e lo inoltra al tuo comando.

La magia avviene quando il flusso di dati alla pipe si interrompe:tail mantiene aperto il suo descrittore di file standard, il che provoca la sospensione del comando. Nel frattempo, tail attende semplicemente più input.

Il problema

Il motivo per cui ho detto che sta quasi funzionando è perché sembra esserci un problema di buffering che causa la tail per non scrivere l'ultimo bit di dati che viene inserito in esso. La mia speranza è che qualcuno possa fornire le informazioni per affrontare questo problema.

Correlati:dividere un campo stringa in un array in jq?
Linux
  1. Apertura di un file .tar.gz con un singolo comando

  2. Utilizzo di sed per dividere una stringa con un delimitatore

  3. Utilizzo di find e tar con file con caratteri speciali nel nome

  4. Unisciti ai video con lo schermo diviso

  5. creare tar con più directory e percorsi di file

Come scaricare ed estrarre file Tar con un comando

Tar Vs Zip Vs Gz:differenza ed efficienza

PDF Dividi e unisci "PDFSAM" fa esattamente quello che dice

Guida introduttiva al comando Tar

Installazione e primi passi con Git

Comando diviso Linux con esempi