J'ai installé bsdtar
partir de la source (du site Web libarchive) parce que je ne pouvais pas find un rpm
ni un package dans yum
.
Je peux voir le message d'aide de bsdtar
. Par exemple:
$ bsdtar --help First option must be a mode specifier: -c Create -r Add/Replace -t List -u Update -x Extract Common Options: ... bsdtar 3.1.2 - libarchive 3.1.2
Mais quand j'essaie d'extraire un file, j'obtiens l'erreur suivante:
$ bsdtar -xzC . < archive.tar.gz bsdtar: Error opening archive: Failed to open '/dev/st0'
Comment réparer cette erreur?
En mode x
, toutes les versions de tar
compatibles POSIX requièrent -f
pour lire l'archive d'input ailleurs que par défaut. Pour lire à partir de stdin
, POSIX exige également que vous donniez -
comme nom de file:
$ tar -xf - < file.tar
GNU tar
et bsdtar
include cette syntaxe.
GNU tar
diffère de POSIX en ce sens qu'il acceptera une archive tar
sur stdin
sans un argument -f -
explicite. En fait, POSIX dit que sans -f -
, il ne devrait pas utiliser stdin
du tout. Il ressort clairement de votre question que vous obtenez vos exemples de command line d'un user GNU tar
.
bsdtar
suit POSIX en nécessitant -f -
si vous voulez lire à partir de stdin
plutôt que d'un file.
Cela nous amène à votre question: quand n'est pas donné -f -
, pourquoi bsdtar
choisit-il de lire /dev/st0
? C'est le défaut que j'ai mentionné ci-dessus. POSIX indique seulement que cette valeur par défaut est "dépendante du système"; bsdtar
choisit d'utiliser le nom du nœud dev du premier lecteur de bande , qui se trouve être /dev/st0
sous Linux. 1
Vous devez dire ceci à la place:
$ bsdtar -xf - < archive.tar.gz
Ou, ignorez la redirection entièrement:
$ bsdtar -xf archive.tar.gz
J'ai supprimé -z
car bsdtar
et GNU tar
détecteront automatiquement la compression gzip
en mode x
. (Les anciennes versions de GNU tar
nécessitaient un indicateur de type de compression, mais la détection automatique a été ajoutée dans la version 1.15 publiée en 2004.)
J'ai aussi retiré le -C .
bit car il indique bsdtar
à bsdtar
de passer au directory courant avant de décompresser l'archive. C'est un non-op .
tar
est le ruban ARchiver . tar
vient d' un moment où la plupart des boîtes Unix ont en fait un lecteur de bande.