Почему -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
$
2 ответа
-f
switch принимает аргумент (имя файла). Если 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 являются имена файлов или каталогов, которые должны быть заархивированы.
Обратите внимание, что если входные данные не поступают из стандартного ввода и не выводятся из стандартного вывода (если это необходимо), -f filename
Опция и аргумент должны быть указаны. В то время как справочная страница подразумевает, что порядок является фиксированным, в действительности параметры могут быть в любом порядке. Даже этот странный работает (но он может не работать во всех версиях tar
):
tar -v files_to_archive* -f xyz.tar.gz -cz
Для переносимости, вероятно, лучше придерживаться идиоматического порядка аргументов и даже оставить дефис:
tar czvf xyz.tar.gz files_to_archive*
z можно использовать последним:
tar -x -v -f foo.tar.gz -z
Но, как утверждает @Dennis, флаг f принимает аргумент.