tar sai em “Cannot stat: Não existe esse arquivo de diretório”, por quê?

50

Estou tentando criar o arquivo tar.gz usando o seguinte comando:

sudo tar -vcfz dvr_rdk_v1.tar.gz dvr_rdk/

Em seguida, ele começa a criar arquivos (muitos arquivos na pasta), mas então eu recebo o seguinte erro:

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

Não vejo nenhuma descrição desse erro, o que isso significa?

resgate
fonte

Respostas:

61

Remova -das vcfzopções. tarnão precisa de hífen para opções.

Com um hífen, o argumento para a -fopção é z. Portanto, o comando está tentando arquivar dvr_rdk_v1.tar.gze dvr_rdkentrar em um arquivo chamado z. Sem o hífen, a semântica das opções muda, de modo que o próximo argumento na linha de comando, ou seja, o nome do arquivo do seu arquivo, se torne o argumento do fsinalizador.

Verifique também sua permissão de gravação no diretório a partir do qual você está executando o comando.

Velnix
fonte
6
Ele não precisa de hífens, mas eles não devem ser um problema, são apenas opcionais
Michael Mrozek
18
@MichaelMrozek Na verdade, remover o -faz a diferença, porque o tar do GNU é peculiar. Os argumentos da opção não podem ser agrupados no primeiro argumento quando não começam com a -, portanto, o argumento para fé o próximo argumento e tar, portanto, tar vcfz dvr_rdk_v1.tar.gzé equivalente a tar -v -c -f dvr_rdk_v1.tar.gz -z.
Gilles 'SO- stop be evil' -
11
Também percebi que se eu remover zou ja compactação do arquivo for bem-sucedida, mesmo com os -envolvidos. Quando adiciono o hífen, ele trata o último caractere da opção como um "arquivo". Portanto, como resultado, recebo jou zcomo um arquivo arquivado, se eu usar essa opção -cvfzou -cvfj.
precisa saber é o seguinte
9
Resumo: se 'f' ocorrer como uma opção em qualquer lugar que não seja a última opção, o comando não fará o que foi planejado. Não vejo como o Gnu não pôde adicionar um aviso quando detectou um problema tão sério e facilmente detectável. Passei apenas 40 minutos tentando depurar essa estranheza. Este deve ter desperdiçado centenas de milhares de horas-homem de produtividade.
SMCI
58

A -fopção deve preceder diretamente o nome do arquivo. Então, use em tar -vczf filename.tar.gzvez de-vcfz

twan163
fonte
Ah, isso explica por que o comando que estou usando tenta criar um arquivo compactado chamado jou zcom esses comandos -cvfje -cvfzrespectivamente.
precisa saber é o seguinte
17

O comando tar historicamente tem sido um dos poucos comandos que não seguem as diretrizes de sintaxe do utilitário Unix .

A página de padrões para o tar diz:

f
Use o primeiro operando de arquivo (ou o segundo, se b já tiver sido especificado) como o nome do arquivo morto, em vez do padrão dependente do sistema

Embora as diretrizes de sintaxe incluam isso:

Diretriz 5:
Uma ou mais opções sem argumentos de opção, seguidas por no máximo uma opção que utiliza um argumento de opção, devem ser aceitas quando agrupadas atrás de um delimitador '-'.

Portanto, enquanto o comando que você digitou tar -vcfz dvr_rdk_v1.tar.gz dvr_rdk/seria bom em versões mais antigas do tar, certas versões do tar que são escritas para seguir estritamente as diretrizes de sintaxe do utilitário analisam isso como "usar zcomo argumento de arquivo -f". Portanto, você deve usar o seguinte para ser portátil:

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

Para criar o arquivo morto

$ tar -cvf music.tar Music/

Isso mostra a lista de arquivos e pastas

$ tar -tvf music.tar         

E para extrair novamente

$ tar -xvf music.tar         
dhamu
fonte
Isso realmente não explica o erro dele, certo? Isso está apenas explicando o uso de tar.
Bernhard
11
@Bernhard Bem, seu erro foi que ele estava usando tarerrado, embora agradável que da a pelo menos menção que a diferença fundamental é (se movendo -fpara o final)
Michael Mrozek
2
@MichaelMrozek Bem, ele preferiu deixar de fora o zque colocar fno final, daí o meu comentário.
Bernhard
Este trabalho de comando para ubuntu, será sucesso
Dhamu
ESTÁ BEM! desculpe, não estou ouvindo sua pergunta, mas o comando funcionando para o ubuntu.
dhamu 6/09/2014