Por que estou recebendo um erro: “Falha ao abrir '/ dev / st0'” ao extrair um arquivo com o bsdtar?

7

Instalei bsdtar da fonte (do site libarchive) porque não consegui encontrar um rpm nem um pacote em yum .

Consigo ver a mensagem de ajuda de bsdtar . Por exemplo:

$ 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

Mas quando tento extrair um arquivo, recebo o seguinte erro:

$ bsdtar -xzC . < archive.tar.gz
bsdtar: Error opening archive: Failed to open '/dev/st0'

Como corrijo esse erro?

    
por Gautham Badhrinathan 19.05.2014 / 21:16

1 resposta

8

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ó , que por acaso é /dev/st0 no Linux. 1

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 .

  1. 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.
por 20.05.2014 / 06:17

Tags