Je rencontre un problème assez étrange et je n'arrive pas à comprendre ce qui se passe. J'ai un fichier tgz, scip-3.2.0.tgz , qui génère une erreur lorsque je tente de le décompresser. L'erreur ne se produit que sur OS X (je suis sur 10.10.4). Je peux extraire le fichier sans erreur sur une boîte Linux exécutant CentOS 6.6. L'erreur se produit lorsque vous utilisez à la fois la commande de ligne de tar
commande et lorsque vous utilisez l'utilitaire d'archivage. J'ai envoyé la liste de diffusion SCIP par e-mail et j'ai le même hachage SHA-1 qu'un autre utilisateur ( e085a4a3591eddf945dcb365d97d2512c267e374
), il n'y a donc pas eu d'erreur de téléchargement. Ils ne savent pas ce qui se passe.
Voici l'erreur que j'obtiens lorsque j'essaie de décompresser à l'aide de l'utilitaire d'archivage:
Dans le cas où l'image est cassée, le texte de l'image dit ceci:
Impossible de développer "scip-3.2.0.tgz" en "Bureau".
(Erreur 1 - Opération non autorisée.)
Et lorsque j'essaie de décompresser via la ligne de commande, c'est la sortie que j'obtiens . C'est la dernière ligne ( tar: Error exit delayed from previous errors.
) qui me concerne. Je ne vois pas ce qui en est la cause. L'archive semble s'extraire sans problème, mais je ne lui fais pas confiance avec cette erreur lancée.
Est-ce que quelqu'un sait ce qui cause cela?
[edit]
En regardant de plus près la sortie, la ligne 1108 contient l'erreur:
x scip-3.2.0/applications/Coloring/Makefile: Can't create 'scip-3.2.0/applications/Coloring/Makefile'
tar
commande livrée avec OS X.gunzip -c scip-3.2.0.tgz | tar xopf -
ligne de commande, comme vous l'utiliseriez pour votre script?gunzip
fonctionne très bien, mais lorsque j'essaie d'extraire l'archive non compressée, c'est à ce moment que l'erreur est renvoyée.Réponses:
Cela devrait aider à identifier ce qui se passe dans la réponse de Johnny , ainsi qu'à répondre à la question de savoir pourquoi cela fonctionne sur Linux mais pas sur Mac.
Le problème réside dans le fait que Mac OS X utilise
bsdtar
, alors que la plupart des systèmes Linux utilisentgnutar
.Vous pouvez installer
gnutar
sur un Mac avec Homebrew, en utilisantbrew install gnu-tar
, qui sera un lien symboliquegnutar
vers/usr/local/bin
asgtar
.Si vous installez
gnutar
, vous pouvez reproduire le problème en suivant les étapes de la réponse de Johnny .Il est donc évident que les
gnutar
choses sont archivées différemment d'une manière qui provoque l'bsdtar
étouffement des doublons. Le fait quigtar -ztvf test.tar.gz
indique que la deuxième instance detest/a
est archivée en tant quelink to test/a
est pertinent. Comme Johnny le souligne dans les commentaires,gnutar
stockera les doublons sous forme de liens physiques plutôt que le fichier réel, qui peut être désactivé avec--hard-dereference
.Autrement dit, vous pouvez effectuer les opérations suivantes:
Cependant, dans ce cas, vous ne contrôlez évidemment pas la création de l'archive tar, ce
--hard-dereference
n'est donc pas une option. Heureusement, sur la base de la réponse du PO , il semble que ce problème ait été résolu par l'amont.Néanmoins, si quelqu'un d'autre rencontre ce problème à l'avenir et a besoin d'une solution rapide ou a un responsable en amont qui ne répond pas, il existe une solution de contournement.
Une fois que vous avez identifié le fichier en double, vous pouvez utiliser l'
--fast-read
option debsdtar
(notez que cette option n'est qu'une partie debsdtar
, pasgnutar
):Ainsi, dans l'exemple de jouet que j'ai créé à la suite de l'exemple de jouet dans la réponse de Johnny , le fichier en double est
test/a
. Ainsi, vous pouvez éviter ce problème en procédant comme suit:Notez, en outre, que
gnutar
vous êtes parfaitement heureux de décompresser une archive avec des doublons qui a été créée par elle-même, même lorsque l'--hard-dereference
option n'a pas été utilisée:Cela répond donc à votre question de savoir pourquoi une erreur est lancée sur Mac mais pas Linux. (La plupart) des distributions Linux sont livrées avec
gnutar
, et comme l'archive tar était vraisemblablement empaquetée avecgnutar
, il n'y aura pas d'erreur lors du déballage avecgnutar
, mais il y aura une erreur lors du déballage avecbsdtar
.Pour plus de lecture et de référence, on pourrait vouloir regarder quelles sont les différences entre bsdtar et GNU tar? sur Unix.SE.
la source
gtar -tcvf
, gnutar est suffisamment "intelligent" pour optimiser le deuxième fichier de copie sous forme de lien au lieu de le dupliquer dans l'archive.--hard-dereference
option désactive ce comportement.L'existence d'un fichier en double dans l'archive ne doit pas le rendre invalide ou impossible à extraire sur OSX, car par défaut, tar écrase les doublons.
Donc, je suis un peu confus par le comportement dans votre Gist - tar OSX permet pour les fichiers en double dans une archive (un retour à son objectif initial en tant que t singe ar civette utilitaire, il permet aux fichiers à ajouter à la fin de l'archive sur bande, et lorsque l'archive est restaurée, la dernière version du fichier remplacera la ou les anciennes versions)
Ce n'est que lorsque l'option "-k" est présente que tar doit avertir des fichiers préexistants.
Ici, j'ai créé une archive avec un fichier en double puis je l'ai extraite sans problème. Ce n'est que lorsque j'ai ajouté l'option -k qu'elle m'a averti du fichier en double:
Un simple problème umask ne semble pas être le coupable non plus, j'ai essayé de changer mon umask en 0777 et je peux toujours extraire l'archive:
Je pensais que je pouvais dupliquer le problème en ajoutant délibérément un répertoire non inscriptible à l'archive, mais cela n'a pas fonctionné, tar n'a pas mis à jour les autorisations sur le répertoire lorsqu'il a extrait l'archive:
J'ai également essayé de changer les autorisations sur test / a à 000, en l'ajoutant à l'archive, puis en ajoutant un autre test / a, mais celui-ci a bien fonctionné aussi:
Je voudrais donc vraiment voir l'archive d'origine qui a causé le problème et voir ce qui aurait pu être dans cette archive pour causer ce problème.
Si un nom de fichier et un répertoire partagent le même nom, tar a un problème d'extraction, mais il a un message d'erreur assez clair:
(si le conflit s'est produit dans l'autre sens, c'est-à-dire qu'un fichier est arrivé en premier, puis un répertoire du même nom est venu plus tard, tar le supprime simplement et crée le répertoire:
la source
Il s'avère que l'utilitaire tar OS X était le bon! Il y avait en effet une erreur dans l'archive. Ce fil de discussion en parle plus en détail, mais le problème est qu'il y a un fichier en double dans l'archive . Les gars de SCIP réparent l'archive pendant que je tape ceci.
[edit]
Le scip-3.2.0.tgz nouvellement mis à jour est maintenant en train d'extraire très bien! Le hachage SHA-1 du nouveau tgz est
5b4e8283f4a5bf9e50f9a62d4320d6f5f50c8476
.[edit 2]
Ce n'est pas qu'il y ait une erreur dans l'archive. C'est simplement que
bsdtar
, qui est livré avec OS X, gère les fichiers en double différemment de celuignutar
qui est livré avec Linux. La réponse de @Adam Liter ici fournit une explication approfondie de ce qui se passe.la source
-k
option, ce qui le mettrait en garde contre les fichiers préexistants. Malheureusement, ils ont déjà mis à jour lescip-3.2.0.tgz
fichier pour supprimer la dupe, donc je ne peux pas tester cette archive.tar
extrait réagit différemment en essayant d'extrairescip-3.2.0/applications/Coloring/Makefile
deux fois selon votreumask
. Si le 1er créé ne vous laisse pas un accès en écriture, la 2ème tentative échoue.Il existe un logiciel d'archivage alternatif, gratuit et léger que j'utilise pour Mac OSX. Cela s'appelle Keka et je l'utilise pour décompresser 7zip plus spécifiquement. De plus, il peut décompresser d'autres types comme .rar, .tar, .gz, etc.
la source