Maksimum boyuttaki bloklara bölünmüş katranlı arşiv oluşturma


83

Oldukça büyük bir dizini yedeklemem gerekiyor, ancak tek tek dosyaların boyutuyla sınırlıyım. Temelde tar.(gz|bz2)200 MB maksimum arşive bölünmüş bir arşiv oluşturmak istiyorum . Clonezilla, buna benzer bir resim yedeğini bölerek buna benzer bir şey yapar:

sda1.backup.tar.gz.aa
sda1.backup.tar.gz.ab
sda1.backup.tar.gz.ac

Bunu tek komutta yapmamın bir yolu var mı? splitKomutun nasıl kullanılacağını anlıyorum , ancak dev bir arşiv oluşturmak zorunda kalmam, daha sonra daha küçük arşivlere bölmek zorunda kalmak istemem çünkü başlangıçta arşivi oluşturmak için gereken disk alanını iki katına çıkarır.


Yanıtlar:


108

Tar komutunu split komutuna yönlendirebilirsiniz:

tar cvzf - dir/ | split --bytes=200MB - sda1.backup.tar.gz.

Bazı * nix sistemlerinde (OS X gibi) aşağıdaki hatayı alabilirsiniz:

split: illegal option -- -

Bu durumda şunu deneyin (not alın -b 200m):

tar cvzf - dir/ | split -b 200m - sda1.backup.tar.gz.

FAT32 formatlı bir sürücüye sığdırmak için dosyayı bölmeye çalışıyorsanız, 4294967295 bayt sınırını kullanın. Örneğin:

tar cvzf - /Applications/Install\ macOS\ Sierra.app/ | \
split -b 4294967295 - /Volumes/UNTITLED/install_macos_sierra.tgz.

3
Harika! Arşivi nasıl çıkarabilirim?
Naftuli Kay

24
Will cat sda1.backup.tar.gz.* | tar xzvf -işi?
Naftuli Kay

3
Evet, olmalı. splitöntanımlı olarak dosyaları isimlendirir, böylece LOCALE'ye göre sıralanırsa (ki bu kabuk kabuğu ile yapılır) doğru sırada olur.
Ürdün

4
Ayrıntılı olmadan, sadece tar czf ...olmadan yapın vve cat backup.tar.gz.* | tar tar xzf - olmadan yapın v. Buradaki ayrıntılı çıkışın hiçbir faydasını göremiyorum v.
Léo Léopold Hertz 준영

1
: Sadece bir FAT32 biçimlendirilmiş flash sürücü üzerine Xcode ambalaj ile bir arkadaş yardımcı tar cvzf - Xcode.app/ | split -b 2000m - /Volumes/PH/xcode/xcode.tgz(den kullanılan cd /Applications/) Çok teşekkür ederim :)
ecth

13

MacOS'ta, splitkomut biraz farklı şekilde çalışır:

$ tar cvzf - foo | split -b 2500m - foo.tgz.

4

Eklemek gerekirse: vfat / fat32 içindeki izin verilen maksimum dosya boyutu 2 ^ 32 eksi 1 (4294967295 bytes) olduğundan, bu tür bir dosya sisteminde izin verilen maksimum dosya boyutuna sahip split komutu:

split -b4294967295 -d my_input_file my_output_file_splitted

3
serega@serega-sv:~$ tar -c  -M --tape-length=1024 --file /tmp/pseudo-tape.tar --new-volume-script=/tmp/new-volume.sh --volno-file=/tmp/volno /tmp/stuff-to-archive 
tar: Removing leading `/' from member names
moving /tmp/pseudo-tape.tar to /tmp/archive.1
moving /tmp/pseudo-tape.tar to /tmp/archive.2
moving /tmp/pseudo-tape.tar to /tmp/archive.3

Sözde-tape.tar dosyasını yeni bir isme taşımak için bir komut dosyasına ihtiyacınız olacak:

serega@serega-sv:~$ cat /tmp/new-volume.sh 
dir="/tmp"
base_name="pseudo-tape.tar"
next_volume_name=`echo -n "archive."; cat $dir/volno`
echo "moving $dir/$base_name to $dir/$next_volume_name"
mv "$dir/$base_name" "$dir/$next_volume_name"

Cevabınızı reddetmedim, çünkü kullananları gördüğüme sevindim -M --tape-length. Bununla birlikte, bu cevap OP'nin gzip veya bzip2 sıkıştırması kullanan bir çözüm isteğini yok sayıyor.
sampablokuper 15:18

Dikkat: hakkında tardeğil, adı verilen bir katran klonundan gtar(GNU katran) bahsetmiyorsunuz . Bu katran klonu, çoklu cilt arşivlerini oluşturmayı destekler, ancak göze çarpan bir olasılıkla, takip hacminin doğru devam bölümü olmadığını yanlış bir şekilde iddia ettiği için bu çoklu cilt arşivlerinden çıkarılamaz / isteksizdir.
schily 11
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.