GNU/Linux >> Znalost Linux >  >> Linux

Split And Merge – s DVD!?

Řekněme, že mám velký soubor s názvem foo.tar.xz .
Rozdělil jsem soubor na části o velikosti těsně pod 4,7 GB pomocí split -b 4689887232 foo.tar.xz foo.tar.xz. , což mi dává soubory s názvem foo.tar.xz.aa , foo.tar.xz.ab , atd.
Potom zapíšu každý soubor na jiné DVD a pošlu ho Alici pomocí poměrně velkého poštovního holuba.

Nyní mohla Alice vložit každé DVD, zkopírovat každý soubor do svého PC a pak použít cat a xz získat obsah foo :cat foo.tar.xz.* | tar xfJ -

Nyní předpokládejme, že Alice má na svém počítači právě dostatek místa pro uložení extrahovaného obsahu foo . Existuje nějaká příchuť cat který bude číst tyto soubory přímo z DVD a pozastaví stream, aby jí umožnil vložit další DVD? Něco jako pausecat nebo volumecat ?

Přijatá odpověď:

O takové cat nevím příchuť, ale tady je řešení, které téměř funguje:

  1. V jednom terminálu spusťte mkfifo myfifo; tail -c +1 -f myfifo | tar xfJ -
  2. Vložte první DVD do jednotky DVD-ROM (např. dev/sr0).
  3. V druhém terminálu spusťte dd if=/dev/sr0 of=myfifo
  4. Když dd dokončí, vyjměte DVD.
  5. Pokud máte jiný disk DVD, vložte jej do jednotky DVD-ROM a přejděte ke kroku 3, jinak přejděte ke kroku 6.
  6. V prvním terminálu stiskněte CTRL-C, abyste ukončili tail a tar .

Jak to funguje

Trik je v použití tail nepřetržitě číst z pojmenované roury. Výstup tail je pak přesměrován na příkaz, který chcete spustit. Zpočátku je potrubí neotevřené, takže se nic neděje. Ale když začnete čerpat data do potrubí pomocí dd , tail zvedne a předá vašemu příkazu.

Kouzlo se stane, když se tok dat do potrubí zastaví:tail ponechává svůj standardní deskriptor souboru otevřený, což způsobí pozastavení příkazu. Mezitím tail prostě čeká na další vstup.

Problém

Důvod, proč jsem řekl, že to téměř funguje, je ten, že se zdá, že došlo k problému s ukládáním do vyrovnávací paměti, který způsobuje tail nezapsat poslední bit dat, který je do něj vložen. Doufám, že někdo může poskytnout přehled, jak to vyřešit.

Související:Rozdělit pole řetězce do pole v jq?
Linux
  1. Otevření souboru .tar.gz jediným příkazem

  2. Echo jak stdout, tak stderr

  3. Použití find a tar se soubory se speciálními znaky v názvu

  1. Trim s Lvm a Dm-crypt?

  2. Spuštění skriptu s „. “ A se „zdrojem“?

  3. Připojte se k videím pomocí rozdělené obrazovky

  1. Je Rsync ~/foo Target/foo stejný jako Rsync ~/foo/ Target/foo/?

  2. Najít soubory a rozbalit je (s mezerami)

  3. Použití sed k rozdělení řetězce s oddělovačem