Tar робкий отказ от создания пустого архива что значит как исправить

I use the following tar command to try to backup my entire file system

tar -cvpzf test/backup.tar.gz --exclude=/test

And I receive the following error message

tar: Cowardly refusing to create an empty archive
Try 'tar --help' or 'tar --usage' for more information.

Can somebody point me in the right direction as to how to use tar and explain why it’s trying to create an empty archive?

viraptor's user avatar

viraptor

33.1k9 gold badges106 silver badges189 bronze badges

asked Jun 6, 2017 at 1:43

Nicole Louise's user avatar

4

You defined what to exclude, but didn’t define what you actually want in the archive. Supply at least one path. If you want entire filesystem, then tar -c....... /

answered Jun 6, 2017 at 1:48

viraptor's user avatar

viraptorviraptor

33.1k9 gold badges106 silver badges189 bronze badges

Я являюсь новым в человечности и контакте с серверами. Я использую Ubuntu 16.04 x64. Я хочу иметь резервное копирование для своей всей системы, Таким образом, я следовал за этим видео https://www.youtube.com/watch? v=KTayZIou-1M

Я ввожу эту команду

sudo tar -cvpzf mybackup.tar.gz --exclude=/backup/mybackup.tar.gz --one-file-system 

Но я получил эту ошибку

tar: Cowardly refusing to create an empty archive

Затем я понял, что забываю добавлять ‘/’ после ‘-одна файловая система’, Таким образом, я добавляю его.

sudo tar -cvpzf mybackup.tar.gz --exclude=/backup/mybackup.tar.gz --one-file-system/

и получите эту ошибку

tar: unrecognized option '--one-file-system/'

Заранее спасибо.

задан
13 February 2020 в 20:44

поделиться

3 ответа

Добавьте пространство перед “/” в конце Вашей команды. Измените Ваш:

sudo tar -cvpzf mybackup.tar.gz --exclude=/backup/mybackup.tar.gz --one-file-system/

кому:

sudo tar -cvpzf mybackup.tar.gz --exclude=/backup/mybackup.tar.gz --one-file-system /

ответ дан Eric Mintz
20 February 2020 в 22:54

поделиться

Только для полноты:

Простой вызов tar могло бы быть что-то как: tar cf foo.tar file1 file2 file3. Это говорит tar создавать архив в файле, названном foo.tar, содержащим file1, file2 и file3. (Обратите внимание на это с tar, - перед аргументами “команды” является дополнительным, таким образом, можно использовать cf или -cf поскольку Вы считаете целесообразным).

Устраняя некоторого другого (несколько не важный, в настоящий момент) флаги, Ваш первый вызов чрезвычайно эквивалентен tar cf foo.tar. Как вышеупомянутый, это говорит этому создавать архив в названном файле foo.tar, но это не говорит этому файлов для помещения в архив. И это – то, что сообщение об ошибке говорит Вам: так как Вы не указали файлов для архивации, нет никакого смысла в создании архива ничего для содержания.

Когда Вы добавляете / (и правильно разделите его от других параметров), который говорит это, какие файлы Вы хотите добавить к архиву, поэтому теперь это может создать архив, который на самом деле содержит что-то (так, запрещая другие ошибки, это сделает так).

ответ дан Matthew Towers
20 February 2020 в 22:54

поделиться

Поскольку Вы никогда не говорили этому создавать резервную копию чего-либо

Вы имеете

  • команда tar
  • некоторые опции, которые идут перед именем файла tar: -cpzvf
  • имя файла tar: mybackup.tar.gz
  • некоторые опции, которые следят за именем файла tar: --exclude=/backup/mybackup.tar.gz --one-file-system

и затем nada. Вы не указываете каталог для резервного копирования. Это – обязательный аргумент, как Вы могли бы предположить.

Затем Вы поймали себя, и Вы добавили /, но думал, что это была модификация опции, а не параметр все его собственное.

/ каталог. Это – корневой каталог. Высказывание, что в этом средстве контекста “создают резервную копию всей файловой системы”.

Поскольку Peter обсуждает, tar лучший способ не состоит в том, чтобы создать резервную копию загрузочного тома. Не в последнюю очередь отъезд tarball на загрузочном томе ничего не делает для Вас, если диск перестал работать.

ответ дан Harper – Reinstate Monica
20 February 2020 в 22:54

поделиться

Другие вопросы по тегам:

Похожие вопросы:

Re: tar: Робкий отказ от создания пустого архива

Из man-1.5m2 

BAD_CONFIG_FILE
	"Файл настроек %s полон маразмаn"
CONFIG_OPEN_ERROR
	"Предупреждаю: не смог открыть файл настроек %sn"
PARSE_ERROR_IN_CONFIG
	"Облом рассасывания файла настроекn"
INCOMPAT
	"Ключики %s и %s суть несовместимыn"
NO_ALTERNATE
	"Звиняйте, хлопци, альтернативные системы не поддерживаютсяn"
NO_COMPRESS
	"Человече был сотворён с автоматическим сжатием кошачьей страницы,n
но COMPRESS не определено в файле настроек.n"
NO_NAME_FROM_SECTION
	"И чего же тебе надобно, старче, в разделе %s?n"
NO_NAME_NO_SECTION
	"Какое справочное руководство изволите?n"
NO_SUCH_ENTRY_IN_SECTION
	"Нетути ничего про %s в разделе %s руководстваn"
NO_SUCH_ENTRY
	"Ничего про %s в руководстве нетn"
PAGER_IS
	"nпользую %s как смотрелкуn"
SYSTEM_FAILED
	"Ошибка исполнения команды форматирования или просмотра.n
Внешняя комманда %s обломилась со статусом %d.n"
VERSION
	"%s, версия %sn"
OUT_OF_MEMORY
	"Память исчерпана - обломился отхватить %d байт(ов)n"
ROFF_CMD_FROM_FILE_ERROR
	"Ошибка рассасывания *roff команды в файле %sn"
MANROFFSEQ_ERROR
	"Ошибка рассасывания MANROFFSEQ. Пользую системное значение.n"
ROFF_CMD_FROM_COMMANDLINE_ERROR
	"Ошибка рассасывания *roff ко-манды из командной строки.n"
UNRECOGNIZED_LINE
	"Невтемяшная строчка в файле настроек (ну, и чёрт с ней)n%sn"
GETVAL_ERROR
	"man-config.c: унутренняя ошибка: строчка %s не найденаn"
FOUND_MANDIR
	"Нашёл директорию %s справочного руководстваn"
FOUND_MAP
	"Нашёл отображение для manpath: %s --> %sn"
FOUND_CATDIR
	"соответствующая кошачья дирька есть %sn"
LINE_TOO_LONG
	"Строка в файле настроек непомерно длиннаn"
SECTION
	"nраздел: %sn"
UNLINKED
	"оторваное %sn"
GLOBBING
	"globbing %sn"
EXPANSION_FAILED
	"Попытка [%s] развернуть страничку руководства обломиласьn"
OPEN_ERROR
	"Не могу открыть страницу %s руководстваn"
READ_ERROR
	"Ошибка чтения страницы %s руководстваn"
FOUND_EQN
	"обнаружена директива eqn(1)n"
FOUND_GRAP
	"обнаружена директива grap(1)n"
FOUND_PIC
	"обнаружена директива pic(1)n"
FOUND_TBL
	"обнаружена директива tbl(1)n"
FOUND_VGRIND
	"обнаружена директива vgrind(1)n"
FOUND_REFER
	"обнаружена директива refer(1)n"
ROFF_FROM_COMMAND_LINE
	"рассасываю директиву из командной строкиn"
ROFF_FROM_FILE
	"рассасываю директиву из файла %sn"
ROFF_FROM_ENV
	"рассасываю директиву из средыn"
USING_DEFAULT
	"пользую последовательность препроцессора по умолчаниюn"
PLEASE_WAIT
	"Малюю страничку, подождите, пожалуйста...n"
CHANGED_MODE
	"сменил режим доступа к %s на %on"
CAT_OPEN_ERROR
	"Не могу открыть %s на запись.n"
PROPOSED_CATFILE
	"попытаюсь записать %s, если потребуетсяn"
IS_NEWER_RESULT
	"статус, полученный от is_newer() = %dn"
TRYING_SECTION
	"пробую раздел %sn"
SEARCHING
	"nищу в %sn"
ALREADY_IN_MANPATH
	"но %s уже содержится в области поиска (manpath)n"
CANNOT_STAT
	"Предупреждаю: не могу нащупать файл %s!n"
IS_NO_DIR
	"Предупреждаю: %s НЕ директория!n"
ADDING_TO_MANPATH
	"добавляю %s к области поиска (manpath)n"
PATH_DIR
	"nпуть директории %s "
IS_IN_CONFIG
	"есть в файле настроекn"
IS_NOT_IN_CONFIG
	"нет в файле настроекn"
MAN_NEARBY
	"но туточки рядом есть директория справочного руководстваn"
NO_MAN_NEARBY
	"и нет тут никакой директории руководстваn"
ADDING_MANDIRS
	"nдобавляю обязательные директории руководстваnn"
CATNAME_IS
	"cat_name в convert_to_cat () есть: %sn"
NO_EXEC
	"nне исполняю команду:n  %sn"
USAGE1
	"Пользуй: %s [-adfhktwW] [section] [-M path] [-P pager] [-S list]nt"
USAGE2
	"[-m system] "
USAGE3
	"[-p string] название ...nn"
USAGE4
	"  a : найти все подходящие пунктыn
  c : не пользуй кошачий файл ни в коем разеn
  d : завалить отладочной информациейn
  D : то же, что и -d, но к тому же ещё и показывать страницы руководстваn
  f : то же самое, что whatis(1)n
  h : выдать эту подсказкуn
  k : то же самое, что apropos(1)n
  K : искать строчку по всем страницамn"
USAGE5
	"  t : пользовать troff для форматирования вывода страниц на печатьn"
USAGE6
	"
  w : перечислить страницы руководства, которые будут показаныn
      (если название страницы не указано, --- все просматриваемые директории)n
  W : то же, что и для -w, но выдавать только названия файловnn
  C филе    : пользовать `филе' в качестве файла настроекn
  M путь    : пользовать сей `путь' как область поиска страниц руководствn
  P скло    : пользовать сию программу `скло' для просмотра страницn
  S list    : список разделов. Пункты списка должны разделяться двоеточиямиn"
USAGE7
	"  m система : искать справочные руководства другой системыn"
USAGE8
	"  p строчка : указывает, какой препроцессор пользоватьn
               e - [n]eqn(1)   p - pic(1)    t - tbl(1)n
               g - grap(1)     r - refer(1)  v - vgrind(1)n"
USER_CANNOT_OPEN_CAT
	"и усер не может открыть кошачью страницу тожеn"
USER_CAN_OPEN_CAT
	"но усер может открыть кошачью страницуn"
CANNOT_FORK
	"обломался вылупить команду _%s_n"
WAIT_FAILED
	"ошиблась, пока ждала ребёнка _%s_n"
GOT_WRONG_PID
	"очень странно ... получила другой pid пока ждала моего ребёночкаn"
CHILD_TERMINATED_ABNORMALLY
	"фатальный облом: команда _%s_ завершилась обломомn"
IDENTICAL
	"Страница %s руководства идентична %sn"
MAN_FOUND
	"Обнаружены страниц(ы) руководства:n"
NO_TROFF
	"ошибочка вышла: в %s не указана команда для TROFFn"
NO_CAT_FOR_NONSTD_LL
	"кошачья страница не сложена, из-за ненормальной длины строкиn"

kaktyc ★★★★

(20.03.07 00:13:23 MSK)

  • Ссылка

I’m trying to follow this tutorial to full backup my linux / Ubuntu 12.04 after a fresh restore.

my code in fullserver.sh:

tar -cvpf /backups/fullbackup.tar --directory=/ --exclude=proc
--exclude=sys --exclude=dev/pts --exclude=backups .

gives after executing ./backups/fullserver.sh the following error:

tar: Cowardly refusing to create an empty archive Try `tar --help' or `tar --usage' for more information. 
./backups/fullserver.sh: line 2: --exclude=sys: command not found

Any help to resolve this issue? I read somewhere that I have to remove “/” from the tar line, but I’m not sure that this is true…

Byte Commander's user avatar

asked May 2, 2015 at 16:53

Bill Bird's user avatar

I encountered this warning when trying to execute the command without specifying the zipped file name. For example:

tar -zcvf directoryName

The warning was not issued when I executed this:

tar -zcvf directoryName.tar.gz directoryName/

answered Feb 5, 2017 at 15:05

Justinshyf's user avatar

JustinshyfJustinshyf

2312 silver badges2 bronze badges

The command should be just one line:

tar -cvpf /backups/fullbackup.tar --directory=/ --exclude=proc --exclude=sys --exclude=dev/pts --exclude=backups .

It seems you’ve split it into two lines.

answered May 2, 2015 at 16:57

Florian Diesch's user avatar

Florian DieschFlorian Diesch

85.4k17 gold badges224 silver badges214 bronze badges

4

I recently got that error too. Turns out I forgot to specify the files to add to the archive:

tar -cf hello.tar

After I selected the current directory as the files to add, it worked:

tar -cf hello.tar ./*

answered Mar 3, 2022 at 7:33

MC Emperor's user avatar

проблем достаточно, но в тоже время их не так много

:-) Одной хватит чтобы за 2 секунды развалить всю систему если в альтах буквально следовать русскому переводу с английского:

# tar --help|grep '-C,'
  -C, --directory=КАТАЛОГ   перейти в КАТАЛОГ

# LC_ALL=C tar --help|grep '-C,'
  -C, --directory=DIR        change to directory DIR

# rpm -qf $(which tar)
tar-1.26.90-alt1

Выловлено совершенно случайно.
change – изменять, сменить {cambridge dictionary}
Но никак не перейти.
Буквально:
change to directory DIR – [из|c]менить на каталог DIR [для распаковки]
В контексте -xvf, опция -C применяется для выбора каталога для распаковки содержимого архива. Но никак не для перехода в каталог.

Вот так оно и бывает: ищешь одно, а находишь другое…

« Последнее редактирование: 08.10.2015 07:54:10 от ruslandh »


Записан



Записан


Отправлен баг-репорт на неверный перевод опции tar в help
https://bugzilla.altlinux.org/show_bug.cgi?id=31333

Поступило предложение не исправлять.
Тогда me уберёт у себя к чёртовой матери все русскоязычные мессаги чтобы ничего и никогда не ловить:

$ locale > ~/.i18n
$ sed -i 's/MESSAGES="ru_RU.UTF-8"/MESSAGES="en_US.UTF-8"/' ~/.i18n

Или/и вкрутит алиас EN или RU с полным выносом русской локализации из системы.

У мана однозначное мнение:

$ man tar|col -bfx|sed -n '83,84p'
       -C, --directory DIR
              меняет каталог на указанный

$ LC_ALL=C man tar|col -bfx|sed -n '119,120p'
       -C, --directory DIR
              change to directory DIR
что по смыслу одно и то же.

Теперь вопрос:
– Куда именно после комбинации Esc+i я переместился (перешёл, скриншот 2), если команда pwd до хоткея и после него покажет одно и то же.
– Может быть менял? (каталог на альтернативной панели не переходя никуда)
С многозначительным русским языком со множеством значений одного и того же слова, можно вольно обращаться в литературе, но не в докуменации.

« Последнее редактирование: 07.10.2015 17:23:09 от Speccyfighter »


Записан


У мана однозначное мнение:
$ man tar|col -bfx|sed -n '83,84p'
       -C, --directory DIR
              меняет каталог на указанный
$ LC_ALL=C man tar|col -bfx|sed -n '119,120p'
       -C, --directory DIR
              change to directory DIR
что по смыслу одно и то же.

И тут сразу возникает вопрос — меняет на указанный какой? каталог. Причём из контекста никакого ответа на этот вопрос не следует.

Тем более “перейти в каталог” ни разу не соответствует. Нет, оно, конечно, может быть при извлечении временно переходит в указанный каталог, но сие никак не объясняет смысла параметра.

Там и вовсе лучше привычное для всех архиваторов — извлечь в каталог “DIR”.


Записан


Там и вовсе лучше привычное для всех архиваторов — извлечь в каталог “DIR”.

И это было бы абсолютно однозначно.
Что для help’а правильно.
У 7z и unzip приблизительно так же. Т.е. однозначно.

Короче:
Помню что у 7z опция -o без пробела, но на tar меня замкнуло.
help на опцию tar выдал комментарий после которого на автомате вырвалось: зачем? Тем более под root’ом.
Англоязычный help выдал прямо противоположный комментарий.
Поскольку один help прямо противоречил другому, судьёй для разрешения спора был избран man.
И только после этого, до меня начало доходить предположение, что м.б. переводчик имел в виду алгоритм работы? Но сейчас он меня интересует меньше всего. Ибо root я, и другим быть нельзя.

В общем оно так:
help для меня, это мини-man с набором однозначно трактуемых действий.
А не угадай сам. Тем более под root.


Записан


Там и вовсе лучше привычное для всех архиваторов — извлечь в каталог “DIR”.

И это было бы абсолютно однозначно.

   Только тут есть один нюанс — эта опция может назначать каталог для извлечения (при распаковке), и может назначать каталог (или несколько каталогов) из которых брать файлы (при создании архива).
   Корни проблемы растут не из перевода, а из чрезмерного сокращения man-а идущего с пакетом. Что называется — выплеснули в водой младенца. :-)

В более другой документации:

Из http://www.gnu.org/software/tar/manual/tar.html:

`--directory=dir'
`-C dir'

  When this option is specified, tar will change its current directory to
dir before performing any operations. When this option is used during
archive creation, it is order sensitive. See section Changing the Working
Directory.

Из man FreeBSD:

-C directory, --cd directory, --directory directory
  In c and r mode, this changes the directory before adding the
  following files. In x mode, change directories after opening the
  archive but before extracting entries from the archive.

Из man OpenBSD:

-C directory
  This is a positional argument which sets the working directory for the
following files. When extracting, files will be extracted into the specified
directory; when creating, the specified files will be matched from the
directory.

« Последнее редактирование: 08.10.2015 00:55:11 от stranger573 »


Записан


Спасибо за цитаты.

Про gnu.
Это и имел в виду, что изменение директории, это только изменение, а действие в целом зависит от набора других опций.

Но что приятно удивило, опэнбсдшники оказались предельно краткими и точными – ни добавить, ни убавить.

Свои мысли отталкиваясь от Линукс, сначала написал, потом удалил, – цитаты говорят сами за себя.


Записан


Кстати, у нас ман(ы) по tar до предела куцые.
Они не упоминают, в отличие от gnu.org, что для запаковки, при использовании опции -C требуется формат:

$ tar -rf архив.tar -C где что [что что]

$ tar -rf arch-probe5.tar -C ./.elinks bookmarks globhist gotohist

$ tar -tf arch-probe5.tar
bookmarks
globhist
gotohist

Да и косяков в ALT’ах хватает.

gnu.org:

$ tar -c -f jams.tar grape prune -C food cherry
$ tar -c -f foo.tar -C /etc passwd hosts -C /lib libc.a

ALT:

$ tar -cf arch-probe7.tar
tar: Робкий отказ от создания пустого архива
Try 'tar --help' or 'tar --usage' for more information.

При создании пустого архива замена create на append срабатывает:

$ tar -cf arch-probe9.tar
tar: Робкий отказ от создания пустого архива
Try 'tar --help' or 'tar --usage' for more information.

$ tar -rf arch-probe9.tar
$

$ ll arch-probe9.tar
-rw-r--r-- 1 user user 10240 окт  8 05:22 arch-probe9.tar

$ tar -tf arch-probe9.tar
$

$ tar -rf arch-probe9.tar .bashrc
$ tar -tf arch-probe9.tar
.bashrc

Из чего как бы следует, что при создании архива без добавления файлов, применять опцию -c, с текущей версией tar, в ALT’ах не рекомендуется.
В скриптах тем более.
Иначе будет вылет с ошибкой.

« Последнее редактирование: 08.10.2015 06:24:42 от Speccyfighter »


Записан


tar: недопустимый параметр — «�»

Что-то мне подсказывает, что у вас кириилическая с, а не латинская c ?


Записан


$ tar -cf arch-probe9.tar
tar: Робкий отказ от создания пустого архива
Try 'tar --help' or 'tar --usage' for more information.


Записан


tar: недопустимый параметр — «�»

Что-то мне подсказывает, что у вас кириилическая с, а не латинская c ?

:-) Спасибо, мой слепой глаз, исправил

$ tar --create --file=empty-archive.tar
tar: Робкий отказ от создания пустого архива
Try 'tar --help' or 'tar --usage' for more information.

$ tar --append --file=empty-archive.tar

$ ls empty-archive.tar
empty-archive.tar


tar робко, но послал:

$ tar --create --file=myarch.tar
tar: Робкий отказ от создания пустого архива
Try 'tar --help' or 'tar --usage' for more information.

« Последнее редактирование: 08.10.2015 06:26:09 от Speccyfighter »


Записан


$ tar -cf arch-probe7.tar .bash_history -C ./tmp
$ ls -l  arch-probe7.tar
-rw-r--r-- 1 user user 10240 окт  8 06:17 arch-probe7.tar


Записан


$ pwd
/home/writer/test1
$ tar -cf arch-probe7.tar $HOME/.bash_history -C $HOME/tmp
tar: Удаляется начальный `/' из имен объектов
$ tar -cf arch-probe7.tar $HOME/.bash_history -C /tmp
tar: Удаляется начальный `/' из имен объектов
$ pwd
/home/writer/test1
$ tar -tf arch-probe7.tar
home/writer/.bash_history
$ pwd
/home/writer/test1
$ ls -l /tmp/a*
ls: невозможно получить доступ к /tmp/a*: Нет такого файла или каталога
$ ls -l $HOME/tmp/a*
ls: невозможно получить доступ к /home/writer/tmp/a*: Нет такого файла или каталога


Записан


man -a tar

EXAMPLES
       tar -xvf foo.tar
              verbosely extract foo.tar

       tar -xzf foo.tar.gz
              extract gzipped foo.tar.gz

       tar -cjf foo.tar.bz2 bar/
              create   bzipped   tar  archive  of  the  directory  bar  called
              foo.tar.bz2

       tar -xjf foo.tar.bz2 -C bar/
              extract bzipped foo.tar.bz2 after changing directory to bar


Записан


Т.e. в примерах приведено только одно применение параметра -С:

   tar -xjf foo.tar.bz2 -C bar/извлечь сжатые bzip’ом foo.tar.bz2 после изменения каталога на bar


Записан


Добавить комментарий