¿Cómo obtener un archivo de alquitrán vacío?

20

Estoy haciendo un RPM en el que todo está contenido en el archivo .spec (no pregunte :-). rpmbuild requiere un archivo "Source", así que estaba intentando crear un archivo tar vacío. Sin embargo, si no doy ningún nombre de archivo, tar se queja:

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

¿Cómo creo un archivo tar realmente vacío?

Sean Reifschneider
fuente
ha sido respondido antes aquí superuser.com/questions/133186/…
Rhyuk
3
En realidad, @Rhuyuk, no lo ha hecho. Esa publicación es alguien que olvidó enumerar un nombre de archivo, y la respuesta les ayudó a darse cuenta de que necesitaban pasar otro argumento, dando como resultado un archivo no vacío. Por eso cambié el título de esa pregunta y creé esta pregunta, que HACE responde lo que el título de esa pregunta estaba preguntando.
Sean Reifschneider

Respuestas:

23

Puede forzar a GNU y BSD tar para crear un archivo vacío con:

tar -cf tarfilename.tar -T /dev/null
Sean Reifschneider
fuente
4
Tal vez estés usando alguna versión extraña de GNU tar, pero la mayoría de la gente probablemente necesitará algo más como tar -c -T /dev/null -f tarfilename.tar. No es que la mayoría de la gente necesite crear un archivo de alquitrán vacío ...
jjlin
1
Una razón para crear un tar vacío: creación de tar con script. Paso 1: Crea el tar. Paso 2: Agrega archivos uno por uno. Puedes hacer esto con un "si el primer archivo crea otro, luego agrega", pero eso no es tan fácil.
dpk
4
@dpk: Si entiendo lo que está diciendo, ¿por qué no usa siempre el apéndice? Append creará el archivo tar si aún no existe, por lo que no necesita verificar si es el primer archivo, solo agregue y si es el primer archivo tar lo creará.
Sean Reifschneider
1
@SeanReifschneider Parece que funcionaría bien. Bonito.
dpk
1
@SeanReifschneider: +1 para la sugerencia de que el modo de adición crea el archivo para el primer archivo si aún no está en el disco. Estoy usando el comando Buscar para ejecutar el comando en modo de adición en una secuencia de comandos, por lo que no fue necesario crear el archivo de antemano.
GuruM
5

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
fuente
Finalmente algo que funciona en Solaris !! Muchas gracias
AJPerez
3

Pude crear un archivo vacío al archivar un solo archivo y luego eliminar el archivo del archivo.

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

Esto funciona para mi

lornix
fuente
2
Puedo verificar que con GNU tar esto producirá el archivo de 10K esperado de todos los caracteres NUL.
Sean Reifschneider
1

Un archivo tar vacío es solo un archivo con 10240 bytes NUL en él. Así que para crear un archivo tar vacío, ni siquiera necesitas tar pero en su lugar puede utilizar cualquiera de estos:

$ 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
fuente
@KamilMaciorowski gracias por sus sugerencias sobre el uso de dd! ¡Aprendí algo nuevo! Acerca de responder a la pregunta correcta: el título de hecho pregunta "cómo forzar el alquitrán", pero cuando se lee el texto de la pregunta, queda claro que OP realmente quiere un archivo tar vacío y no debería importar cómo.
josch
Seguí adelante y edité la pregunta.
Kamil Maciorowski