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.