Boş bir tar arşiv nasıl alınır?


24

Her şeyin .spec dosyasında bulunduğu bir RPM yapıyorum (sorma :-). rpmbuild bir "Source" dosyası gerektirir, bu yüzden boş bir tar dosyası oluşturmaya çalışıyordum. Ancak, herhangi bir dosya adı vermezsem, tar şikayet eder:

tar: Cowardly refusing to create an empty archive
Try `tar --help' or `tar --usage' for more information.

Gerçekten boş bir tar dosyasını nasıl oluşturabilirim?


daha önce burada cevaplandı: superuser.com/questions/133186/…
Rhyuk

3
Aslında, @Rhuyuk, olmadı. Bu yazı, bir dosya adı vermeyi unutturan biri ve cevap, boş olmayan bir arşive yol açan başka bir argüman iletmeleri gerektiğini anlamalarına yardımcı oldu. Bu yüzden, bu sorunun başlığını değiştirdim ve bu sorunun başlığını sorduğuna cevap veren DOES sorusunu oluşturdum .
Sean Reifschneider,

Yanıtlar:


24

GNU ve BSD tar'ı aşağıdakilerle boş bir arşiv oluşturmaya zorlayabilirsiniz:

tar -cf tarfilename.tar -T /dev/null

ya, 'f' seçeneği dosya ismini belirttiği için son olmalıdır. T adında bir arşiv oluşturacaksınız, ancak yine de tarfilename.tar dosyasının eksik olduğu bir hata olacaktır.
lornix

1
Boş bir katran oluşturmanın bir nedeni: scriptli katran yaratma. Adım 1: Katranı oluşturun. Adım 2: Dosyaları birer birer ekleyin. Bunu bir "ilk dosya sonra başka bir şey oluştur sonra ekle" ifadesiyle yapabilirsiniz ancak bu o kadar da yumuşak değildir.
dpk

4
@dpk: Ne dediğini anlıyorsam, neden her zaman append kullanmıyorsun? Ekleme, eğer mevcut değilse, tar dosyasını oluşturacaktır, bu yüzden ilk dosya olup olmadığını kontrol etmenize gerek yoktur, sadece ekleyin ve ilk dosyasa tar oluşturacak.
Sean Reifschneider

1
@SeanReifschneider İşe yarayacak gibi görünüyor. Güzel.
dpk

1
@SeanReifschneider: Ekleme modunun ipucu için +1, zaten diskte değilse, ilk dosya için arşivi oluşturur. Tar komutunu komut dosyasında ekleme modunda çalıştırmak için find komutunu kullanıyorum, bu nedenle önceden arşiv dosyasını oluşturmanıza gerek kalmadı.
GuruM

8

BSD: tar cvf empty.tar --from-file /dev/null

GNU (Linux): tar cvf empty.tar --files-from /dev/null

Solaris: tar cvf empty.tar -I /dev/null


Sonunda Solaris'te çalışan bir şey !! Çok teşekkürler
AJPerez

4

Boş bir tar dosyası sadece içinde 10240 NUL bayt olan bir dosyadır. Yani boş bir tar dosyası oluşturmak için ihtiyacınız bile yok, tarbunun yerine bunlardan birini kullanabilirsiniz:

$ head --bytes=10240 /dev/zero > empty.tar
$ truncate --size=10240 empty.tar
$ fallocate --length=10240 empty.tar
$ dd if=/dev/zero bs=10240 count=1 iflag=fullblock > empty.tar
$ dd if=/dev/zero bs=1 count=10240 > empty.tar

@KamilMaciorowski dd kullanımıyla ilgili ipuçlarınız için teşekkürler! Yeni bir şey öğrendim! Doğru soruyu cevaplama hakkında: Başlık gerçekten "tar nasıl zorlanır" diye sorar, ancak soru metnini okurken, OP'nin aslında boş bir tar dosyası istediği ve ne olduğu önemli olmamalıdır.
josch

Devam ettim ve soruyu düzelttim.
Kamil Maciorowski

3

Tek bir dosyayı arşivleyerek, ardından dosyayı arşivden silerek boş bir arşiv oluşturabildim.

tar cf empty.tar somefile                   # creates archive
tar --delete -f empty.tar somefile          # remove the file
tar tf empty.tar                            # list contents of archive

Bu benim için çalışıyor.


2
GNU tar ile bunun tüm NUL karakterlerinden beklenen 10K dosyasını üreteceğini doğrulayabilirim.
Sean Reifschneider
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.