Katakanlah saya memiliki file besar bernama foo.tar.xz
.
Saya membagi file menjadi beberapa bagian dengan ukuran masing-masing kurang dari 4,7 GB, menggunakan split -b 4689887232 foo.tar.xz foo.tar.xz.
, yang memberi saya file bernama foo.tar.xz.aa
, foo.tar.xz.ab
, dll.
Kemudian saya menulis setiap file ke DVD yang berbeda dan mengirimkannya ke Alice menggunakan merpati pos yang agak besar.
Sekarang Alice dapat memasukkan setiap DVD, menyalin setiap file ke PC-nya, dan kemudian menggunakan cat
dan xz
untuk mendapatkan isi foo
:cat foo.tar.xz.* | tar xfJ -
Sekarang Asumsikan bahwa Alice memiliki cukup ruang di PC-nya untuk menyimpan konten yang diekstrak dari foo
. Apakah ada rasa cat
yang akan membaca file-file ini langsung dari DVD dan menjeda aliran untuk memungkinkan dia memasukkan DVD berikutnya? Sesuatu seperti pausecat
atau volumecat
?
Jawaban yang Diterima:
Saya tidak tahu cat
seperti itu rasa, tapi inilah solusi yang hampir bekerja:
- Dalam satu terminal jalankan
mkfifo myfifo; tail -c +1 -f myfifo | tar xfJ -
- Masukkan DVD pertama ke dalam drive DVD-ROM (mis. dev/sr0).
- Di terminal kedua jalankan
dd if=/dev/sr0 of=myfifo
- Kapan
dd
selesai, keluarkan DVD. - Jika Anda memiliki DVD lain, masukkan ke dalam drive DVD-ROM dan lanjutkan ke langkah 3, jika tidak, lanjutkan ke langkah 6.
- Di terminal pertama, tekan CTRL-C untuk mematikan
tail
dantar
.
Cara kerjanya
Caranya adalah dengan menggunakan tail
untuk terus membaca dari pipa bernama. Output dari tail
kemudian disalurkan ke perintah yang ingin Anda jalankan. Awalnya pipa belum dibuka jadi tidak terjadi apa-apa. Tetapi ketika Anda mulai memompa data ke dalam pipa dengan dd
, tail
mengambilnya dan meneruskannya ke perintah Anda.
Keajaiban terjadi ketika aliran data ke pipa berhenti:tail
membuat deskriptor file keluar standarnya tetap terbuka, yang menyebabkan perintah Anda dijeda. Sementara itu, tail
hanya menunggu masukan lainnya.
Masalahnya
Alasan saya mengatakan ini hampir berhasil adalah karena sepertinya ada masalah buffering yang menyebabkan tail
untuk tidak menulis bit terakhir dari data yang dimasukkan ke dalamnya. Harapan saya adalah seseorang dapat memberikan wawasan untuk mengatasi hal ini.