tar se termine sur “Cannot stat: Aucun fichier de répertoire de ce type”, pourquoi?

50

J'essaie de créer un fichier tar.gz en utilisant la commande suivante:

sudo tar -vcfz dvr_rdk_v1.tar.gz dvr_rdk/

Il commence alors à créer des fichiers (plusieurs fichiers dans un dossier), mais j'obtiens ensuite l'erreur suivante:

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

Je ne vois aucune description de cette erreur, qu'est-ce que cela signifie?

ransh
la source

Réponses:

61

Supprimer -des vcfzoptions. tarn'a pas besoin de trait d'union pour les options.

Avec un trait d'union, l'argument de l' -foption est z. La commande tente donc d’archiver dvr_rdk_v1.tar.gzet dvr_rdkdans une archive appelée z. Sans le trait d'union, la sémantique des options change pour que l'argument suivant de la ligne de commande, c'est-à-dire le nom de fichier de votre archive, devienne l'argument de l' findicateur.

Vérifiez également votre autorisation en écriture dans le répertoire à partir duquel vous exécutez la commande.

Velnix
la source
6
Il n'a pas besoin de traits d'union, mais ils ne devraient pas être un problème, ils sont simplement facultatifs
Michael Mrozek
18
@MichaelMrozek En fait, la suppression de cette commande -fait une différence, car GNU tar est bizarre. Les arguments optionnels ne peuvent pas être regroupés dans le premier argument quand il ne commence pas par un -, l'argument to fest donc l'argument suivant tar, et tar vcfz dvr_rdk_v1.tar.gzest donc équivalent à tar -v -c -f dvr_rdk_v1.tar.gz -z.
Gilles 'SO- arrête d'être méchant'
1
Je me suis aussi rendu compte si je supprime le zou jla compression d'archive est réussie même avec -impliqué. Lorsque j'ajoute un trait d'union, il traite le dernier caractère de l'option comme un "fichier". En conséquence, je reçois jou zsous forme de fichier archivé si j'utilise cette option -cvfzou -cvfj.
JohnnyQ
9
Récapitulatif: si "f" apparaît comme une option ailleurs que dans la dernière option, la commande ne fera pas ce qui était prévu. Je ne vois pas comment Gnu n'a pas pu ajouter d'avertissement lorsqu'il détecte un problème aussi grave et facilement détectable. Je viens de passer 40 minutes à essayer de déboguer cette étrangeté. Celui-ci a dû gaspiller des centaines de milliers d'heures de productivité.
smci
58

L' -foption doit précéder directement le nom du fichier. Alors, utilisez tar -vczf filename.tar.gzau lieu de-vcfz

twan163
la source
Ah, cela explique pourquoi la commande que j'utilise tente de créer un fichier d’archive compressé appelé jou zavec ces commandes -cvfjet -cvfzrespectivement.
JohnnyQ
17

La commande tar est historiquement l’une des rares commandes à ne pas suivre les instructions de la syntaxe de l’utilitaire Unix .

La page des normes pour tar dit:

f
Utilisez le premier opérande de fichier (ou le second, si b a déjà été spécifié) comme nom de l'archive au lieu du nom par défaut dépendant du système.

Bien que les instructions de syntaxe incluent ceci:

Directive 5:
Une ou plusieurs options sans option-argument, suivies d'au plus une option prenant un option-argument, devraient être acceptées lorsqu'elles sont regroupées derrière un séparateur '-'.

Ainsi, alors que la commande que vous avez saisie, tar -vcfz dvr_rdk_v1.tar.gz dvr_rdk/conviendrait aux anciennes versions de tar, certaines versions de tar écrites dans le strict respect des instructions de syntaxe de l'utilitaire analyseront le terme "utiliser zcomme argument de fichier -f". Donc, vous devriez utiliser les éléments suivants pour être portable:

tar -cvzf dvr_rdk_v1.tar.gz dvr_rdk/
Mark Plotnick
la source
-1

Pour créer l'archive

$ tar -cvf music.tar Music/

Cela montre la liste des fichiers et dossiers

$ tar -tvf music.tar         

Et pour extraire à nouveau

$ tar -xvf music.tar         
Dhamu
la source
Cela n'explique pas vraiment son erreur, non? Ceci explique simplement l’utilisation de tar.
Bernhard
1
@Bernhard Eh bien, son erreur était qu'il utilisait tarmal, bien qu'il soit agréable de mentionner au moins la différence essentielle (se diriger -fvers la fin)
Michael Mrozek
2
@MichaelMrozek Eh bien, il a plutôt laissé de côté le zque de mettre fà la fin, d'où mon commentaire.
Bernhard
Cette commande fonctionne pour Ubuntu, elle aura du succès
dimanche
D'ACCORD! désolé, je n'écoute pas votre question, mais la commande fonctionne pour Ubuntu.
Dhamu