GNU/Linux >> Belajar Linux >  >> Linux

Pisahkan Dan Gabungkan – Dengan DVD!?

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:

  1. Dalam satu terminal jalankan mkfifo myfifo; tail -c +1 -f myfifo | tar xfJ -
  2. Masukkan DVD pertama ke dalam drive DVD-ROM (mis. dev/sr0).
  3. Di terminal kedua jalankan dd if=/dev/sr0 of=myfifo
  4. Kapan dd selesai, keluarkan DVD.
  5. Jika Anda memiliki DVD lain, masukkan ke dalam drive DVD-ROM dan lanjutkan ke langkah 3, jika tidak, lanjutkan ke langkah 6.
  6. Di terminal pertama, tekan CTRL-C untuk mematikan tail dan tar .

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.

Terkait:Membagi bidang string menjadi array di jq?
Linux
  1. Apakah Rsync ~/foo Target/foo Sama Dengan Rsync ~/foo/ Target/foo/?

  2. Temukan file dan tar (dengan spasi)

  3. Gema ke stdout dan stderr

  1. Menggunakan sed untuk membagi string dengan pembatas

  2. tar -C dengan pola file wildcard

  3. Kompres folder dengan tar?

  1. Pangkas Dengan Lvm Dan Dm-crypt?

  2. Menjalankan Script Dengan “. ” Dan Dengan “sumber”?

  3. Membuka file .tar.gz dengan satu perintah