Назад | Перейти на главную страницу

Почему tar -xvfz не работает, а tar xvfz работает?

tar -xvfz foo.tar.gz возвращает ошибку tar: z: Cannot open: No such file or directory

Это вполне понятно - f switch ожидает имя файла, поэтому должен быть последним.

Однако, опуская дефис tar xvfz foot.tar.gz работает, распаковывает и разархивирует файл.

Я тестировал это на OS X 10.8 и Ubuntu 12.04.

Есть идеи, почему?

[отредактировано, чтобы добавить]

Я всегда использую tar -zxvf foo.tar.gz. Однако этот вопрос возник из-за это xkcd, и мое удивление, когда кто-то настоял на том, чтобы tar xvfz должно сработать.

tar имеет 3 типа синтаксиса (согласно этот ):

  • длинные параметры (--file)
  • короткие параметры (-f)
  • старые варианты (е)

В старом синтаксисе опций все буквы должны следовать за «tar» и все должны попадать в одну группу без пробелов. Порядок букв на самом деле не имеет значения, если аргументы этих букв следуют в том же порядке после группы вариантов.

Этот старый способ написания опций tar может удивить даже опытных пользователей. Например, две команды:

 # tar cfz archive.tar.gz file
 # tar -cfz archive.tar.gz file

совершенно разные. В первом примере в качестве значения параметра «f» используется «archive.tar.gz», и он распознает параметр «z». Однако во втором примере в качестве значения опции «f» используется «z» - вероятно, не то, что было задумано.

Старые параметры сохранены для совместимости со старыми версиями tar.

Команда со знаком '-' эквивалентна

tar -czf archive.tar.gz file
tar -cf archive.tar.gz -z file
tar cf archive.tar.gz -z file

Это причина того, что ваш пример работает без «-», а не с «-»