Bagaimana cara mendapatkan arsip tar kosong?

21

Saya membuat RPM di mana semuanya terkandung dalam file .spec (jangan tanya :-). rpmbuild memerlukan file "Sumber", jadi saya mencoba membuat file tar kosong. Namun, jika saya tidak memberikan nama file, tar mengeluh:

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

Bagaimana cara membuat file tar yang benar-benar kosong?

Sean Reifschneider
sumber
sudah dijawab sebelumnya di sini: superuser.com/questions/133186/…
Rhyuk
3
Sebenarnya, @Rhuyuk, belum. Posting itu adalah seseorang yang lupa membuat daftar nama file, dan jawabannya membantu mereka menyadari bahwa mereka perlu melewati argumen lain, menghasilkan arsip yang tidak kosong. Inilah sebabnya saya mengubah judul pertanyaan itu, dan menciptakan pertanyaan ini, yang TIDAK menjawab apa yang diajukan judul pertanyaan itu.
Sean Reifschneider

Jawaban:

23

Anda dapat memaksa tar GNU dan BSD untuk membuat arsip kosong dengan:

tar -cf tarfilename.tar -T /dev/null
Sean Reifschneider
sumber
ya, opsi 'f' harus menjadi yang terakhir, karena ini menentukan nama file. Anda akan membuat arsip bernama T, tetapi file tersebut akan kesalahan pada file tarfilename.tar yang hilang.
lornix
1
Salah satu alasan untuk membuat tar kosong: pembuatan tar skrip. Langkah 1: Buat tar. Langkah 2: Tambahkan file satu per satu. Anda dapat melakukan ini dengan "jika file pertama lalu buat yang lain lalu tambahkan" tetapi itu tidak semulus itu.
dpk
4
@ dpk: Jika saya mengerti apa yang Anda katakan, mengapa Anda tidak selalu menggunakan append? Append akan membuat file tar jika belum ada, jadi Anda tidak perlu memeriksa apakah itu file pertama, cukup tambahkan dan apakah itu file tar pertama yang akan membuatnya.
Sean Reifschneider
1
@SeanReifschneider Sepertinya itu akan bekerja dengan baik. Bagus.
DPK
1
@SeanReifschneider: +1 untuk petunjuk bahwa mode append membuat arsip untuk file pertama jika belum ada di disk. Saya menggunakan perintah find untuk mengeksekusi tar dalam mode append dalam skrip sehingga tidak perlu membuat file arsip sebelumnya.
GuruM
7

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

Sild
sumber
Akhirnya sesuatu yang bekerja di Solaris !! Terima kasih banyak
AJPerez
3

Saya dapat membuat arsip kosong dengan mengarsipkan satu file, lalu menghapus file dari arsip.

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

Ini bekerja untuk saya.

lornix
sumber
2
Saya dapat memverifikasi bahwa dengan GNU tar ini akan menghasilkan file 10K yang diharapkan dari semua karakter NUL.
Sean Reifschneider
3

File tar kosong hanyalah file dengan 10240 NUL byte di dalamnya. Jadi untuk membuat file tar kosong, Anda bahkan tidak perlu tartetapi dapat menggunakan salah satu dari ini:

$ 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
josch
sumber
@KamilMaciorowski terima kasih atas petunjuk Anda tentang penggunaan dd! Saya belajar sesuatu yang baru! Tentang menjawab pertanyaan yang tepat: Judul memang menanyakan "bagaimana cara memaksa tar" tetapi ketika membaca teks pertanyaan, menjadi jelas, bahwa OP benar-benar menginginkan file tar kosong dan seharusnya tidak masalah bagaimana.
josch
Saya melanjutkan dan mengedit pertanyaan.
Kamil Maciorowski