extrair para um diretório diferente do diretório atual com o pax archiver

5

Eu tenho um comportamento estranho com o arquivador de pax aqui, tive muitos problemas com o alcatrão e seu caminho absoluto, é por isso que eu dei uma chance ao pax. O oneliner abaixo é usado no FreeBSD 9.2 para extrair arquivos criptografados. Basicamente funciona muito bem, mas ao tentar extrair o arquivo para outro caminho que não o diretório de trabalho, recebo a mensagem de erro:

WARNING! These patterns were not matched:
/home/myuser/testing

Exemplo:

    cd /home/myuser

    gpg --no-tty --quiet --no-secmem-warning --yes --batch --passphrase-file /home/myuser/keyfile --decrypt /home/myuser/testing/20110426.pax.xz.gpg | unxz | pax -r 
    # SUCCESS                                                                                                                                                 # SUCCESS

    gpg --no-tty --quiet --no-secmem-warning --yes --batch --passphrase-file /home/myuser/keyfile --decrypt /home/myuser/testing/20110426.pax.xz.gpg | unxz | pax -r /home/myuser
    # SUCCESS                                                                                                                                                 # SUCCESS

    gpg --no-tty --quiet --no-secmem-warning --yes --batch --passphrase-file /home/myuser/keyfile --decrypt /home/myuser/testing/20110426.pax.xz.gpg | unxz | pax -r /home/myuser/testing
    # FAILS                                                                                                                                                   # FAILS

    gpg --no-tty --quiet --no-secmem-warning --yes --batch --passphrase-file /home/myuser/keyfile --decrypt /home/myuser/testing/20110426.pax.xz.gpg | unxz | pax -r /home/myuser/testing/
    # FAILS                                                                                                                                                   # FAILS

Existe definitivamente permissão de escrita em /home/myuser/testing/ além disso, estou executando como root.

Isso realmente "funciona como projetado" e eu tenho que cd /output/path antes de cada extração ou estou fazendo algo errado?

    
por royskatt 16.03.2014 / 20:33

3 respostas

3

O argumento para pax é um caminho dentro do arquivo. O idioma usual, se você quiser descompactar em um diretório diferente, é mudar para o diretório onde deseja descompactar.

… | { cd / && pax -r -pe; }

Outra abordagem é informar pax para reescrever os caminhos. Isso é especialmente útil quando você deseja remover alguns diretórios principais.

… | pax -s '!^/home/myuser!!' -r -pe
    
por 17.03.2014 / 02:14
6

Sim, você precisa cd primeiro.

Quando você fornece um argumento de nome de arquivo, está dizendo pax para extrair apenas arquivos correspondentes a esse argumento.

documentos POSX pax

In read mode (when -r is specified, but -w is not), pax shall extract the members of the archive file read from the standard input, with pathnames matching the specified patterns.

A mensagem de erro que você recebe

WARNING! These patterns were not matched: /home/myuser/testing

Está lhe dizendo que seu arquivo não contém nenhum arquivo nesse diretório.

    
por 16.03.2014 / 20:59
0

Infelizmente, nenhuma das suas sugestões funcionou. O que funciona é:

...| pax -rv -s '=^/old/source/dir/=/new/target/dir/='

Apenas um problema permanece: não consigo usar variáveis shell na expressão regular. A solução alternativa poderia ser: criar todo o comando canalizado dinamicamente em um loop for, mas isso é outra história ...

    
por 18.03.2014 / 22:37

Tags