A adição do parâmetro tar '-z' (gzip) no final de 'tar -cvpfz…' não funciona como esperado

3

Eu estava usando as respostas de Copiar arquivos sem perder permissões de arquivos / pastas pergunta, quando me deparei com este comportamento interessante e inesperado.

Usar tar cvpfz target.tar.gz dir1 funciona perfeitamente e é basicamente a estrutura dos comandos listados nas respostas sugeridas para a pergunta vinculada acima.

Estranhamente, no entanto, quando adicionei o opcional - antes dos parâmetros, (por exemplo, tar -cvpfz ... , pensando que era apenas uma mudança estilística), é aí que a estranheza ocorre.

$ tar -cvpfz target.tar.gz dir1
tar: target.tar.gz: Cannot stat: No such file or directory
...
tar: Exiting with failure status due to previous errors

Mesmo estranho, embora tar -cvpfz ... exiba o erro mencionado acima, o comando realmente funciona, mas em vez de criar um arquivo compactado com gzip, ele cria um arquivo tar com o nome z (mesmo que ainda envie o erro). / p>

Se eu fizer um tar -tvf z , ele listará o conteúdo do tar corretamente. Se eu fizer um tar -ztvf z , ele diz que não é compactado.

Eu finalmente achei que mudar o comando para tar -zcvpf funciona perfeitamente. De alguma forma, colocar o parâmetro z primeiro funciona corretamente, mas colocá-lo por último (ou seja, tar -cvpfz ... ) não funciona!

man tar parece indicar que - é opcional e pode-se pensar que o comando tar deve funcionar de forma idêntica com ou sem - .

Espero que isso ajude alguém que, como eu, adicionou o - , pensando que era apenas uma diferença estilística que não mudaria o comando.

Como estou curioso e gostaria de saber mais sobre isso, alguém pode esclarecer por que isso acontece?

    
por vocadanz 27.09.2015 / 07:13

2 respostas

3

A opção -f deve ser seguida por um nome de arquivo ou dispositivo. Ao usar tar cvpfz target.tar.gz dir1 você está realmente usando o chamado "Old Option Style", onde

  

Quando as opções que precisam de argumentos são dadas junto com o comando, todos os argumentos associados seguem, na mesma ordem das opções. (página de informações do tar)

    
por user448115 27.09.2015 / 09:03
1

Muru realmente respondeu à pergunta com os links que ele postou, mas devido ao seu encorajamento, vou copiar novamente um de seus links e recapitular meus comentários aqui para, com sorte, tornar mais fácil a resposta.

De acordo com este link do StackExchange , o parâmetro f do comando tar é um pouco especial, já que requer um argumento (um nome de arquivo de arquivo) que segue imediatamente o parâmetro f , se você está precedendo seus parâmetros com - (por exemplo, tar -cf ). No entanto, como a resposta no link menciona, pode ser mais seguro apenas renunciar a - , portanto, o parâmetro f não corre o risco de tratar quaisquer parâmetros que você possa colocar após f como nome de arquivo.

Este foi o problema que eu encontrei como declarado na minha pergunta, já que eu tentei colocar o parâmetro z logo após o f (ex. tar -cvpfz ) que causou o comando tar avidamente 'consumir' o z e tratá-lo como o argumento de arquivo filename para o parâmetro f , em vez de tratar o z como simplesmente o parâmetro gzip do comando tar .

Em resumo, omitindo o - (por exemplo, usando tar cvpfz ... em vez de tar -cvpfz ..), o problema encontrado pode ser evitado. Agora eu sei porque. Obrigado, muru!

    
por vocadanz 27.09.2015 / 08:47
yii\base\ErrorException
Copied! Copy Stacktrace Search Stackoverflow Search Google Error

PHP Core Warning – yii\base\ErrorException

PHP Startup: Unable to load dynamic library 'memcached.so' (tried: /usr/lib/php/20190902/memcached.so (/usr/lib/php/20190902/memcached.so: undefined symbol: igbinary_serialize), /usr/lib/php/20190902/memcached.so.so (/usr/lib/php/20190902/memcached.so.so: cannot open shared object file: No such file or directory))

$_GET = [
    'id' => '46859',
    'url' => 'adding-the-tar-z-gzip-parameter-at-the-end-of-tar-cvpfz-doesnt-work',
];

$_COOKIE = [
    'advanced-frontend' => 'qo0m5i6bdjac7j32poqklri2uf',
    '_csrf-frontend' => '154ae0f57d85d61fb0e1cf3031c2a57f1782b1c95e5bfa28d376776580fdce6ea:2:{i:0;s:14:"_csrf-frontend";i:1;s:32:"s1RdaUoEk_2EBk3MrwQZ5XFR-Il4Z02z";}',
];

$_SESSION = [
    '__flash' => [],
];