Возможный дубликат:
sudo tar cvpzf выходит с ошибкой из-за предыдущей ошибки
Когда я выполняю команду
tar -cvfz backup.tar.gz somedirectory
я получаю следующий sterr
tar: Exiting with failure status due to previous errors
Однако когда я опускаю предыдущий дефис из -cvfz
, все работает нормально. Есть ли известная причина, по которой дефис мешает мне залить файлы в tar'ing?
Я не уверен, почему tar cvfz
работает, когда при быстром просмотре страницы man
и моем опыте дефис является стандартной практикой. Может быть, это совместимость с BSD (например, ps
).
В любом случае, ваш синтаксис неверен. -f
принимает следующий аргумент в качестве имени файла для сжатия. В данном случае это имя файла z
, что не соответствует вашим ожиданиям. Вот пример выходных данных, чтобы вы могли понять, что я имею в виду:
$ tar -cvfz test.tar.gz scott
tar: test.tar.gz: Cannot stat: No such file or directory
scott/
scott/netx/
scott/netx/locks/
scott/netx/locks/netx_running
tar: Exiting with failure status due to previous errors
В ls
показан файл с именем z
. Команда file
показывает, что это несжатый архив tar
. Это несжатый, потому что аргумент -z
не был передан. И сообщение об ошибке возникло при попытке добавить несуществующий файл test.tar.gz
в архив.
Просто измените порядок опций, и все будет в порядке:
tar -czvf test.tar.gz some/directory
Если вы всегда сделаете -f
последним аргументом, все будет в порядке. Кстати, помните, что короткие опции (однобуквенные опции), которые принимают аргументы, обычно не требуют пробела между опцией и аргументом.
РЕДАКТИРОВАТЬ: Кстати, если форма без дефиса совместима с BSD или что-то в этом роде, то, вероятно, способ, которым tar
вызывается в такой среде, отличается и не требует флага f
для указания входного файла, но работает больше как cp
или что-то в этом роде. Но это всего лишь предположение, основанное на сравнении с ps
(кн.).