Bagaimana cara membuat arsip tar dibagi menjadi, atau merentang, beberapa file?

27

Menurut halaman ini , seseorang dapat membiarkan tar membuat "tar" arsip tar menjadi file 100 Mb:

tar -c -M --tape-length = 102400 --file = disk1.tar largefile.tgz

Masalahnya adalah bahwa perintah ini akan meminta Anda untuk secara interaktif memberikan nama file baru untuk file berikutnya, setelah file pertama diisi.

Adakah yang tahu cara untuk melewati langkah interaktif ini, dan biarkan tar melakukan "pemisahan" secara otomatis?

Samuel Lampa
sumber
Terkait dengan ini: unix.stackexchange.com/q/61774/6860
sampablokuper

Jawaban:

20

Lihatlah --new-volume-scriptopsi, yang memungkinkan Anda mengganti mekanisme yang diminta dengan mekanisme yang berbeda atau dengan nama file yang dihasilkan. ( (tar.info)Multi-Volume Archivesdi tarhalaman info.) Masalahnya splitadalah Anda harus catmenyatukan kembali untuk melakukan apa pun, sedangkan arsip multivolume harus sedikit lebih fleksibel.

geekosaurus
sumber
Itu benar, tentu saja.
Eduardo I.
2
Terima kasih, ini yang saya cari! Saya sekarang mengetahui bahwa sebenarnya ada beberapa instruksi (termasuk contoh) yang tersedia di sini: gnu.org/software/tar/manual/tar.html#Using-Multiple-Tapes
Samuel Lampa
Masalah dengan ini adalah bahwa itu terlalu terlibat omong kosong dan mempromosikan kebalikan dari aplikasi gaya Unix yang tepat.
Jan Kyu Peblik
33

Anda dapat menggunakan split untuk ini:

tar czpvf - /path/to/archive | split -d -b 100M - tardisk

Ini memberitahu tar untuk mengirim data ke stdout, dan membaginya untuk mengambilnya dari stdin - tambahan menggunakan sufiks numerik ( -d), ukuran chunk ( -b) 100M dan menggunakan 'tardisk' sebagai dasar untuk nama file yang dihasilkan (tardisk00, tardisk01, tardisk02, dll.).

Untuk mengekstrak data setelahnya Anda dapat menggunakan ini:

cat tardisk* | tar xzpvf -
Eduardo I.
sumber
1
Koreksi kecil, -dadalah untuk sufiks numerik, bukan awalan.
yclian
8

Tentu saja opsi terbaik untuk digunakan adalah --new-volume-scriptopsinya.

Tetapi, jika Anda mengetahui ukuran file (dalam hal ini, largefile.tgz), maka Anda dapat melakukan ini juga:

tar -c -M -L 102400 --file=disk1.tar --file=disk2.tar --file=disk3.tar largefile.tgz

Ringkasan:

-c = Create
-M = multi-volume
-L 102400 = 100MB files (disk1.tar, disk2.tar, disk3.tar ...)

(Untuk -L, tentukan sebanyak yang diperlukan sehingga jumlah total file tar lebih besar dari largefile.tgz)

Jika Anda mencoba tarstruktur pohon direktori

pengguna1260486
sumber
1

Saya mulai bekerja dengan perintah berikut:

mkdir -p ./split
rm -rf ./split/*
tar -cML 102400 -F 'cp "${TAR_ARCHIVE}" \
    ./split/part_${TAR_VOLUME}.tar' \
    -f split/part_1.tar large_file.tar.gz

Satu-satunya masalah adalah bahwa part_1.tarsebenarnya akan menjadi file terakhir, dan yang lainnya digeser oleh satu. Yaitu part_2.tarsebenarnya adalah bagian pertama, dan part_k.tarmerupakan bagian (n - 1)ke-5 . Memperbaiki ini dengan beberapa skrip shell adalah sepele, dan dibiarkan sebagai latihan untuk pembaca.

strupo
sumber
1

itu akan secara otomatis membuat file ukuran 1.1GB, jika ukuran tar Anda lebih besar, Anda dapat menambah jumlahnya, misalnya 1000 {2..1000} atau Anda dapat menambah masukan ke argumen panjang pita.

tar --tape-length=1048576 -cMv --file=tar_archive.{tar,tar-{2..100}} backup.tar.lzma
GraphicalDot
sumber