Come ottenere un archivio tar vuoto?


24

Sto realizzando un RPM in cui tutto è contenuto nel file .spec (non chiedere :-). rpmbuild richiede un file "Source", quindi stavo cercando di creare un file tar vuoto. Tuttavia, se non do nessun nome di file, tar si lamenta:

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

Come posso creare un file tar veramente vuoto?


ha già ricevuto una risposta qui: superuser.com/questions/133186/…
— Rhyuk,

3
In realtà, @Rhuyuk, non è così. Quel post è qualcuno che ha dimenticato di elencare un nome file e la risposta li ha aiutati a rendersi conto che dovevano passare un altro argomento, risultando in un archivio non vuoto. Questo è il motivo per cui ho cambiato il titolo di tale questione, e ha creato questa domanda, che FA risposta ciò che il titolo di questa domanda è stato chiesto.
— Sean Reifschneider,

Risposte:


24

Puoi forzare GNU e BSD tar per creare un archivio vuoto con:

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

ya, l'opzione 'f' deve essere l'ultima, in quanto specifica il nome file. Stai per creare un archivio chiamato T, ma si verificherà comunque un errore nel file tarfilename.tar mancante.
— lornix,

1
Un motivo per creare un tar vuoto: creazione di tar con script. Passaggio 1: creare il tar. Passaggio 2: aggiungere i file uno per uno. Puoi farlo con un "se il primo file poi crea altro quindi aggiungi" ma non è così fluido.
— dpk,

4
@dpk: se capisco cosa stai dicendo, perché non usi sempre sempre append? Append creerà il file tar se non esiste già, quindi non è necessario controllare se è il primo file, basta aggiungere e se è il primo file tar lo creerà.
— Sean Reifschneider,

1
@SeanReifschneider Sembra che funzionerebbe benissimo. Bello.
— dpk,

1
@SeanReifschneider: +1 per il suggerimento che la modalità append crea l'archivio per il primo file se non è già sul disco. Sto usando il comando find per eseguire tar in modalità append in uno script, quindi non è necessario creare prima il file di archivio.
— 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


Finalmente qualcosa che funziona in Solaris !! Grazie mille
— AJPerez,

4

Un file tar vuoto è solo un file con 10240 NUL byte al suo interno. Quindi, per creare un file tar vuoto, non è nemmeno necessario tarma invece è possibile utilizzare uno di questi:

$ 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 grazie per i tuoi suggerimenti sull'utilizzo di dd! Ho imparato qualcosa di nuovo! Informazioni sulla risposta alla domanda giusta: Il titolo in effetti chiede "come forzare tar" ma quando si legge il testo della domanda, diventa chiaro che OP vuole effettivamente un file tar vuoto e non dovrebbe importare come.
— Jos

Sono andato avanti e ho modificato la domanda.
— Kamil Maciorowski il

3

Sono stato in grado di creare un archivio vuoto archiviando un singolo file, quindi eliminando il file dall'archivio.

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

Questo funziona per me.


2
Posso verificare che con GNU tar questo produrrà il file 10K previsto di tutti i caratteri NUL.
— Sean Reifschneider,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.