tar sale en "No se puede estadísticas: No existe ese archivo de directorio", ¿por qué?

50

Estoy tratando de crear el archivo tar.gz usando el siguiente comando:

sudo tar -vcfz dvr_rdk_v1.tar.gz dvr_rdk/

Luego comienza a crear archivos (muchos archivos en la carpeta), pero luego aparece el siguiente error:

tar: dvr_rdk_v1.tar.gz: Cannot stat: No such file or directory
tar: Exiting with failure status due to previous errors

No veo ninguna descripción de este error, ¿qué significa?

ransh
fuente

Respuestas:

61

Eliminar -de las vcfzopciones. tarno necesita guión para las opciones.

Con un guión, el argumento para la -fopción es z. Entonces, el comando está intentando archivar dvr_rdk_v1.tar.gzy dvr_rdken un archivo llamado z. Sin el guión, la semántica de las opciones cambia, de modo que el siguiente argumento en la línea de comando, es decir, el nombre del archivo, se convierte en el argumento de la fbandera.

Compruebe también su permiso de escritura en el directorio desde el que está ejecutando el comando.

Velnix
fuente
66
No necesita guiones, pero no deberían ser un problema, solo son opcionales
Michael Mrozek
18
@MichaelMrozek En realidad, eliminarlo -hace la diferencia, porque el alquitrán GNU es peculiar. Los argumentos de opción no se pueden agrupar en el primer argumento cuando no comienza con a -, por lo que el argumento a fes el siguiente argumento y tar, por tar vcfz dvr_rdk_v1.tar.gzlo tanto, es equivalente a tar -v -c -f dvr_rdk_v1.tar.gz -z.
Gilles 'SO- deja de ser malvado'
1
También me di cuenta de que si elimino zo jla compresión del archivo es exitosa incluso con los -involucrados. Cuando agrego el guión está incluido, trata el último carácter de la opción como un "archivo". Como resultado, obtengo jo zcomo un archivo archivado si uso esta opción -cvfzo -cvfj.
JohnnyQ
99
Resumen: si 'f' aparece como una opción en cualquier lugar que no sea la última opción, entonces el comando no hará lo que se pretendía. No veo cómo Gnu no pudo agregar una advertencia cuando detectan un problema tan grave y fácilmente detectable. Acabo de pasar 40 minutos tratando de depurar esta rareza. Este debe haber desperdiciado cientos de miles de horas hombre de productividad.
smci
58

La -fopción debe preceder directamente al nombre del archivo. Entonces, use en tar -vczf filename.tar.gzlugar de-vcfz

twan163
fuente
Ah, esto explica por qué el comando que estoy usando intenta crear un archivo comprimido llamado jo zcon estos comandos -cvfjy -cvfzrespectivamente.
JohnnyQ
17

El comando tar históricamente ha sido uno de los pocos comandos que no sigue el Unix directrices de utilidad sintaxis .

La página de estándares para alquitrán dice:

f
Utilice el primer operando de archivo (o el segundo, si ya se ha especificado b) como el nombre del archivo en lugar del valor predeterminado dependiente del sistema

Si bien las pautas de sintaxis incluyen esto:

Directriz 5:
Una o más opciones sin argumentos de opción, seguidas por un máximo de una opción que tome un argumento de opción, deben aceptarse cuando se agrupan detrás de un delimitador '-'.

Entonces, si bien el comando que escribió, tar -vcfz dvr_rdk_v1.tar.gz dvr_rdk/estaría bien en versiones anteriores de tar, ciertas versiones de tar que están escritas para seguir estrictamente las pautas de sintaxis de utilidad analizarán esto como "usar zcomo argumento de archivo para -f". Por lo tanto, debe usar lo siguiente para ser portátil:

tar -cvzf dvr_rdk_v1.tar.gz dvr_rdk/
Mark Plotnick
fuente
-1

Para crear el archivo

$ tar -cvf music.tar Music/

Esto muestra la lista de archivos y carpetas

$ tar -tvf music.tar         

Y extraer de nuevo

$ tar -xvf music.tar         
dhamu
fuente
Esto realmente no explica su error, ¿verdad? Esto solo explica el uso de tar.
Bernhard
1
@Bernhard Bueno, su error fue que estaba usando tarmal, aunque es bueno al menos mencionar cuál es la diferencia clave (pasar -fal final)
Michael Mrozek
2
@MichaelMrozek Bueno, prefirió dejar de lado zque poner fal final, de ahí mi comentario.
Bernhard
Este comando funciona para ubuntu, tendrá éxito
dhamu
¡OKAY! lo siento, no estoy escuchando tu pregunta, pero el comando funciona para ubuntu.
dhamu