Автор Тема: Ошибка при записи tar.gz, 'удаляется начальный / из имен объектов''  (Прочитано 1889 раз)

Оффлайн o

  • Начинающий
  • *
  • Сообщений: 10
Хотел сделать копию 1 папки для теста, чтобы заархивировать (сделать бэкап для переноса) приложения и утилиты после, но терминал так не думает.
tar -cvzf baa.tar.gz --exclude=/0330  --exclude=/33 --one-file-system /home/user/123
tar: Удаляется начальный `/' из имен объектов
/home/user/123/
/home/user/123/p
/home/user/123/2323/
/home/user/123/baa.tar.gz

В чем может быть причина? Перепробовал разные варианты.

Оффлайн asy

  • alt linux team
  • ***
  • Сообщений: 8 104
Причина чего? "Удаляется начальный `/' из имен объектов" что ли? Кто сказал, что это ошибка? Это - безопасность.

Оффлайн o

  • Начинающий
  • *
  • Сообщений: 10
Причина чего? "Удаляется начальный `/' из имен объектов" что ли?

Именно. Я пробовал удалять слэш перед /home/, но в таком случае он выдавал уже другую ошибку:
tar: home/user/123: Функция stat завершилась с ошибкой: Нет такого файла или каталога
tar: Завершение работы с состоянием неисправности из-за возникших ошибок

Он хоть и создает архив с ошибкой по /, но он пуст
« Последнее редактирование: 24.06.2022 14:34:21 от o »

Оффлайн asy

  • alt linux team
  • ***
  • Сообщений: 8 104
Причина чего? "Удаляется начальный `/' из имен объектов" что ли?
Именно.
Не надо пытаться мешать tar-у удалять начальный слэш, он всё правильно делает. Иначе при распаковке всегда будет распаковка в корень.

Оффлайн o

  • Начинающий
  • *
  • Сообщений: 10
Причина чего? "Удаляется начальный `/' из имен объектов" что ли?
Именно.
Не надо пытаться мешать tar-у удалять начальный слэш, он всё правильно делает.

Допустим не мешаю, но он создает просто пустой архив.

Оффлайн asy

  • alt linux team
  • ***
  • Сообщений: 8 104
Допустим не мешаю, но он создает просто пустой архив.
Это совсем другая проблема. Попробуйте указать "/home/user/123/*"

Оффлайн o

  • Начинающий
  • *
  • Сообщений: 10
Допустим не мешаю, но он создает просто пустой архив.
Это совсем другая проблема. Попробуйте указать "/home/user/123/*"

Так, хорошо, это заработало. Но почему --exclude=/0330 --exclude=/2222 принимает только первый exclude? Типо он в исключения добавил 0330 и проигнорировал 2222. Пытался использовать обратный слэш, который не помог. Точнее помог, но выдал следующее:
tar -cvzf baa.tar.gz \ --exclude=/0330/* \ --exclude=/2222 \ --exclude=/baa.tar.gz -C /home/user/123/* --one-file-system
tar:  --exclude=/0330/*: Функция stat завершилась с ошибкой: Нет такого файла или каталога
tar:  --exclude=/2222: Функция stat завершилась с ошибкой: Нет такого файла или каталога
tar:  --exclude=/baa.tar.gz: Функция stat завершилась с ошибкой: Нет такого файла или каталога
tar: Удаляется начальный `/' из имен объектов
/home/user/123/2222/
/home/user/123/33/
/home/user/123/baa.tar.gz
tar: Удаляются начальные `/' из целей жестких ссылок
tar: Завершение работы с состоянием неисправности из-за возникших ошибок
« Последнее редактирование: 24.06.2022 14:56:14 от o »

Оффлайн Александр Ерещенко

  • Завсегдатай
  • *
  • Сообщений: 1 160
Когда исключений много, лучше брать их из файла - ключик -X FILE или --exclude-from FILE  - исключает из обработки файлы, перечисленные в файле FILE (удобно перечислять по одной записи в строке)

Оффлайн Nicom

  • Завсегдатай
  • *
  • Сообщений: 630
принимает только первый exclude? Типо он в исключения добавил 0330 и проигнорировал 2222. Пытался использовать обратный слэш, который не помог. Точнее помог, но выдал следующее:
Потому что паттерны для exclude нужно указывать вдумчиво
man 7 globУж проще указать все исключения в файле и использовать --exclude-from FILE, как Вам и подсказал Александр.