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.