Почему не может-z быть последним параметром командной строки, который будет использоваться с tar?

$ 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
$
7
задан 17.11.2010, 18:48

2 ответа

-f переключатель берет аргумент (имя файла). Если z появляется после f затем это взято, чтобы быть именем файла.

tar -xvfz one.tar.gz

совпадает с

tar -xvf z one.tar.gz

Если Вы сделали это:

tar -xvf -z one.tar.gz

затем -z был бы взят в качестве имени файла, и Вы получите подобную ошибку.

Это, однако, работало бы:

tar -xvz -f one.tar.gz

GNU tar состояния страницы справочника:

Первым аргументом tar должна быть одна из опций: Acdrtux, сопровождаемый любыми дополнительными функциями. Заключительными аргументами tar являются названия файлов или каталогов, которые должны быть заархивированы.

Обратите внимание, что, если введенный не от stdin или вывода, к stdout (в соответствующих случаях), -f filename опция и аргумент должны быть даны. В то время как страница справочника подразумевает, что порядок фиксируется, в действительности опции могут быть в любом порядке. Даже эти странные работы (но это не может работать во всех версиях tar):

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

Для мобильности, вероятно, лучше придерживаться идиоматического порядка аргументов и даже бросить дефис:

tar czvf xyz.tar.gz files_to_archive*
16
ответ дан 07.12.2019, 14:29

z может использоваться в последний раз:

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

Но, как указано @Dennis, флаг f берет аргумент.

6
ответ дан 07.12.2019, 14:29

Теги

Похожие вопросы