Extrai um único arquivo do tar para outra pasta

6

Eu pesquisei vários fóruns para essas perguntas e vi respostas diferentes, mas até agora nada funcionou até mesmo daquelas que eu vi aqui.

Eu quero extrair um único arquivo de um tar para um diretório diferente.

Eu tentei isso:

tar xvf file.tar -C /home/dir/ filename

ou isto:

tar -x filename -f file.tar -C /home/dir

Mas obtivemos esses erros respectivamente:

x filename, 14826 bytes, 29 media blocks.
File -C not present in the archive.
File /home/dir not present in the archive.

e:

tar: /dev/rmt0: A file or directory in the path name does not exist.

O primeiro extraiu o arquivo, mas no mesmo diretório, não para a pasta que eu queria.

    
por linas31 24.10.2013 / 03:04

1 resposta

9

Na maioria das versões de tar , existem dois modos diferentes, dependendo se você coloca um menos antes de suas opções.

A parte superior do Página man do AIX resume as diferenças:

Berkeley Standards:

tar {c|r|t|u|x} ... [ Archive ] Directory | File ...

X/Open Standards:

tar {-c|-r|-t|-u|-x} ... [-f Archive] ... [-C Directory] File | Directory...

Sem o menos, tar funciona no modo de compatibilidade de Berkeley. Nesse modo, as opções não seguem as convenções de linha de comando do UNIX agora padrão. Em vez disso, todas as bandeiras devem ser colocadas juntas (em qualquer ordem). O sinalizador f significa que a primeira palavra após os sinalizadores é um nome de arquivo que deve ser usado em vez da unidade de fita, /dev/rmt0 . (O t em tar significa fita e os padrões refletem isso.) Observe também que não há -C opção no modo de compatibilidade.

Com o menos, tar funciona como a maioria dos comandos do UNIX. Todos os sinalizadores (e seus argumentos) devem ser especificados primeiro, depois os não sinalizadores vêm depois. -f aceita um nome de arquivo como um argumento (essencialmente, o nome do arquivo pertence ao -f flag), portanto, o file.tar deve vir imediatamente após o -f . É por isso que a página man diz [-f Archive] com Archive ao lado de -f . Mas -x não recebe argumentos ( filename não pertence ao -x ). Novamente, olhando para a man page, filename no seu exemplo corresponde a File | Directory... , que estão no final da linha de comando.

As versões fixas dos seus comandos parecem

(cd /home/dir; tar xvf /path/to/file.tar filename)

e

tar -x -f file.tar -C /home/dir filename

O GNU tar faz algo semelhante. Os três estilos de opção explicam bem as diferenças.

    
por 24.10.2013 / 05:13