tar завершает работу в «Cannot stat: нет такого файла каталога», почему?


50

Я пытаюсь создать файл tar.gz с помощью следующей команды:

sudo tar -vcfz dvr_rdk_v1.tar.gz dvr_rdk/

Затем он начинает создавать файлы (много файлов в папке), но затем я получаю следующую ошибку:

tar: dvr_rdk_v1.tar.gz: Cannot stat: No such file or directory
tar: Exiting with failure status due to previous errors

Я не вижу описания этой ошибки, что это значит?

Ответы:


61

Удалить -из vcfzвариантов. tarне нужен дефис для опций.

Аргументом для -fопции является дефис z. Таким образом, команда пытается выполнить архивирование dvr_rdk_v1.tar.gzи вызывается в dvr_rdkархиве z. Без дефиса семантика параметров изменяется, так что следующий аргумент в командной строке, то есть имя файла вашего архива, становится аргументом для fфлага.

Также проверьте разрешение на запись в каталог, из которого вы выполняете команду.


6
Это не нуждается в дефисах, но они не должны быть проблемой, они просто необязательны
Майкл Мрозек

18
@MichaelMrozek На самом деле удаление -действительно имеет значение, потому что GNU tar - это странно. Аргументы опции не могут быть связаны с первым аргументом, когда он не начинается с a -, поэтому аргумент to fявляется следующим аргументом tar, и, следовательно tar vcfz dvr_rdk_v1.tar.gz, эквивалентен tar -v -c -f dvr_rdk_v1.tar.gz -z.
Жиль "ТАК - перестань быть злым"

1
Я также понял, удастся ли мне удалить zили jсжатие архива будет успешным даже при -включенном. Когда я добавляю дефис, он включается, он обрабатывает последний символ в опции как «файл». В результате я получаю jили zв виде архивного файла, если я использую эту опцию -cvfzили -cvfj.
JohnnyQ

9
Сводка: если «f» встречается как опция, отличная от последней, команда не будет выполнять то, что предполагалось. Я не понимаю, как Gnu не может добавить предупреждение, когда обнаруживает такую ​​серьезную и легко обнаруживаемую проблему. Я просто потратил 40 минут на отладку этой странности. Этот, должно быть, потратил сотни тысяч человеко-часов производительности.
SMCI

58

-fПараметр должен непосредственно предшествовать имя файла. Итак, используйте tar -vczf filename.tar.gzвместо-vcfz


Ах, это объясняет, почему команда, которую я использую, пытается создать сжатый архивный файл, который вызывается jили zс этими командами -cvfjи -cvfzсоответственно.
JohnnyQ

17

Команда дегтя исторически была одна из немногих команд , которые не следуют в Unix директивы коммунального предприятия синтаксисом .

Страница стандартов для tar говорит:

f
Используйте первый файловый операнд (или второй, если b уже указан) в качестве имени архива вместо системно-зависимого значения по умолчанию

Хотя правила синтаксиса включают это:

Рекомендация 5.
Один или несколько параметров без аргументов-параметров, за которыми следует не более одного параметра, который принимает аргумент-параметр, должны приниматься при группировании за одним разделителем '-'.

Таким образом, хотя команда, которую вы ввели tar -vcfz dvr_rdk_v1.tar.gz dvr_rdk/, подойдет для более старых версий tar, некоторые версии tar, написанные для строгого следования рекомендациям по синтаксису утилиты, будут анализировать это как «использовать zв качестве аргумента файла для -f». Таким образом, вы должны использовать следующее для переносимости:

tar -cvzf dvr_rdk_v1.tar.gz dvr_rdk/

-1

Создать архив

$ tar -cvf music.tar Music/

Это показывает список файлов и папок

$ tar -tvf music.tar         

И извлечь снова

$ tar -xvf music.tar         

Это не совсем объясняет его ошибку, верно? Это просто объясняет использование tar.
Бернхард

1
@Bernhard Ну, его ошибка заключалась в том, что он использовал tarнеправильно, хотя приятно хотя бы упомянуть, в чем заключается ключевое отличие (переход -fк концу)
Майкл Мрозек

2
@MichaelMrozek Ну, он скорее пропустил, zчем поставил fв конце, отсюда мой комментарий.
Бернхард

Эта команда работает на Ubuntu, она будет успешной
dhamu

ХОРОШО! извините, я не слушаю ваш вопрос, но команда работает на Ubuntu.
Дхаму
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.