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 типа синтаксиса (согласно этот ):
В старом синтаксисе опций все буквы должны следовать за «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
Это причина того, что ваш пример работает без «-», а не с «-»