tar não lista o conteúdo do pacote tar com a opção -t

1

Estou tentando listar o conteúdo do arquivo tar com o seguinte comando

tar -t "filename".tar

Mas o shell funciona neste para sempre sem qualquer mensagem de saída.

Eu fiz uma pesquisa sobre isso e descobri que, eu deveria usar a opção '-f' com a opção -t para listar o conteúdo do arquivo.

tar -tf "filename".tar

Alguém aqui pode me responder por que devo usar a opção -f com a opção -t para listar o conteúdo do arquivo?

    
por pythondetective 16.11.2014 / 13:04

2 respostas

1

Can anyone here please answer me why should I use -f option with -t option to list content of archive?

Tar começou como uma ferramenta para gravar dados não compactados em uma unidade de fita. (Daí o nome, TApe ARchive). É por isso que o padrão é a unidade de fita.

Em sistemas operacionais semelhantes a unix, os dispositivos são tratados da mesma forma que o arquivo. Uma unidade de fita pode ser / dev / st0 (dispositivo, fita SCSI 0). Esta foi a entrada / saída padrão para o tar.

Se você quiser que o tar acesse outro arquivo, por exemplo, / dev / st1 (segunda unidade de fita) ou /home/my_backup.tar (um arquivo real ), então você precisa especificar isso com a opção -f.

Testando isso em uma instalação moderna, confirme que ele ainda tenta abrir um dispositivo SCSI por padrão:

toad:/home/hennes/demo>tar t demo.tar
tar: Error opening archive: Failed to open '/dev/sa0': No such file or directory

Especificar manualmente um arquivo para abrir com -f funciona conforme o esperado

toad:/home/hennes/demo>tar tf demo.tar
testfile1
testfile2
testfile3

O post de Pauls parece indicar que isso pode não ser mais o padrão em todas as versões do tar. Ler a partir de stdin faz muito mais sentido nos dias de hoje, apesar de quebrar com compatibilidade retroativa. Por esse motivo, ainda prefiro o nome de arquivo - para usar stdout.

    
por 16.11.2014 / 14:01
0

Por padrão tar recebe sua entrada de stdin - por exemplo, da saída de outro comando.

A opção f diz para receber a entrada de um arquivo.

A sintaxe apropriada para usar sem f seria

cat filename.tar | tar t

(note que não há necessidade do hífen com tar ). cat coloca o conteúdo do arquivo nos parâmetros para stdout. O símbolo pipe | pega stdout e passa para o próximo comando stdin.

A razão pela qual tar ficou lá para sempre foi porque estava esperando que os dados chegassem no stdin.

    
por 16.11.2014 / 13:34