No modo x
, todas as versões de tar
compatíveis com POSIX exigem -f
para ler o arquivo de entrada de outro lugar que não o padrão. Para ler a partir de stdin
, o POSIX também exige que você forneça -
como o nome do arquivo:
$ tar -xf - < file.tar
O GNU tar
e o bsdtar
entendem essa sintaxe.
O GNU tar
difere do POSIX porque aceitará um tar
archive em stdin
sem um argumento -f -
explícito. Na verdade, o POSIX diz que sem -f -
, ele não deve usar stdin
. Está claro na sua pergunta que você está obtendo exemplos de sua linha de comando de um usuário GNU tar
.
bsdtar
segue o POSIX ao exigir -f -
se você quiser ler stdin
do que um arquivo.
Isso nos leva à sua pergunta real: quando não é atribuído -f -
, por que bsdtar
escolhe ler /dev/st0
? Esse é o padrão que mencionei acima. POSIX só diz que esse padrão é "dependente do sistema"; bsdtar
escolhe usar o nome da primeira unidade de fita 's Nó nó /dev/st0
Você precisa dizer isso:
$ bsdtar -xf - < archive.tar.gz
Ou pule o redirecionamento totalmente:
$ bsdtar -xf archive.tar.gz
Eu removi -z
porque bsdtar
e% GNUtar
detectarão a compactação gzip
no modo x
automaticamente. (As versões antigas do GNU tar
exigiam um sinalizador de tipo de compactação, mas a autodetecção foi adicionada na versão 1.15 , lançado em 2004.
Eu também removi o -C .
bit, uma vez que ele apenas diz bsdtar
para mudar para o diretório atual antes de descompactar o arquivo. É um sem op .
- Por padrão, a primeira unidade de fita? Porque
tar
é o arquivador de fitas .tar
é proveniente de um horário quando a maioria de todas as caixas Unix tinham, de fato, uma unidade de fita.