Por que não pode -z ser a última opção de linha de comando a ser usada com o tar?

7
$ ls one.tar.gz
one.tar.gz
$ tar -xvfz one.tar.gz
tar: z: Cannot open: No such file or directory
tar: Error is not recoverable: exiting now
$ tar -xvzf one.tar.gz
one
$ tar -xzvf one.tar.gz
one
$ tar -zxvf one.tar.gz
one
$
    
por Lazer 17.11.2010 / 17:48

2 respostas

15

A opção -f recebe um argumento (o nome do arquivo). Se z aparecer após o f , será considerado o nome do arquivo.

tar -xvfz one.tar.gz

é o mesmo que

tar -xvf z one.tar.gz

Se você tivesse feito isso:

tar -xvf -z one.tar.gz

então -z teria sido considerado como o nome do arquivo e você teria recebido um erro semelhante.

Isso, no entanto, teria funcionado:

tar -xvz -f one.tar.gz

A página man% GNUtar afirma:

The first argument to tar must be one of the options: Acdrtux, followed by any optional functions. The final arguments to tar are the names of the files or directories which should be archived.

Observe que, a menos que a entrada seja de stdin ou a saída seja stdout (onde apropriado), a opção -f filename e o argumento devem ser fornecidos. Enquanto a página man implica que a ordem é fixa, na realidade as opções podem estar em qualquer ordem. Mesmo esse estranho funciona (mas pode não funcionar em todas as versões de tar ):

tar -v files_to_archive* -f xyz.tar.gz -cz

Para portabilidade, provavelmente é melhor seguir a ordem dos argumentos idiomáticos e até mesmo deixar o hífen:

tar czvf xyz.tar.gz files_to_archive*
    
por 17.11.2010 / 17:51
6

z pode ser usado por último:

tar -x -v -f foo.tar.gz  -z

Mas, como afirmado por @Dennis, o sinalizador f leva um argumento.

    
por 17.11.2010 / 18:59