Архиватор tar создаёт архив из папки, но не из её содержимого

Как правильно задавать вопросы Правильно сформулированный вопрос и его грамотное оформление способствует высокой вероятности получения достаточно содержательного и по существу ответа. Общая рекомендация по составлению тем: 1. Для начала воспользуйтесь поиском форума. 2. Укажите версию ОС вместе с разрядностью. Пример: LM 19.3 x64, LM Sarah x32 3. DE. Если вопрос касается двух, то через запятую. (xfce, KDE, cinnamon, mate) 4. Какое железо. (достаточно вывод inxi -Fxz в спойлере (как пользоваться спойлером смотрим здесь)) или же дать ссылку на hw-probe 5. Суть. Желательно с выводом консоли, логами. 6. Скрин. Просьба указывать 2, 3 и 4 независимо от того, имеет ли это отношение к вопросу или нет. Так же не забываем об общих правилах Как пример вот
no avatar

Автор темы
alexander8560
Сообщения: 31
Зарегистрирован: 12 ноя 2019, 11:02
Благодарил (а): 48 раз
Поблагодарили: 2 раза
Контактная информация:

Архиватор tar создаёт архив из папки, но не из её содержимого

#1

16 дек 2019, 13:08

Домашняя папка /home/alex. В этой домашней папке создаю папки и файлы txt:
NekPak / NekPak / b1.txt
-------------/ NekPak2 / s3.txt
-------------/ a1.txt
-------------/ a2.txt
То есть внутренняя NekPak со своим файлом, NekPak2 со своим файлом, а1 и а2 - все внутри NekPak внешней, которая внутри /home/alex.

Ещё в самой домашней папке /home/alex создаю папку ArchivePak.

Теперь внутри ArchivePak нужно создать архив с помощью tar, который содержит содержимое внешней (первой) папки NekPak с обязательным условием, что это содержимое не будет содержаться в /home/alex. То есть имеется в виду, что не будет такого, что внутри архива будет папка home, внутри которой папка alex, а внутри той - NekPak. Так не нужно. А нужно, чтобы внутри архива было только содержимое внешней папки NekPak (NekPak внутренняя, NekPak2, a1.txt, a2.txt) без home, без alex и без NekPak внешней.

Как это сделать?

Я попытался, у меня не получилось. Вот мои ходы.

1. Захожу в Терминал, пишу:

Код: Выделить всё

cd ~/ArchivePak
tar --directory=/home/alex/NekPak -cvzpf archive.tar.gz
То есть я сейчас зашёл в папку /home/alex/ArchivePak и внутри неё хочу создать архив из содержимого папки /home/alex/NekPak. Вроде всё правильно и логично. Но вместо создания архива он выдаёт:
Cowardly refusing to create an empty archive.
То есть что-то ему не понравилось. Неясно что.

2. Если же в терминале написать:

Код: Выделить всё

cd ~/ArchivePak
tar -cvzpf archive.tar.gz /home/alex/NekPak
то получается как раз то, что не нужно: папка home, внутри папка alex, затем внутри папка NekPak и только потом содержимое этой папки.

Как сделать так, чтобы в архиве было только содержимое, и архив находился в папке ArchivePak?


no avatar

Автор темы
alexander8560
Сообщения: 31
Зарегистрирован: 12 ноя 2019, 11:02
Благодарил (а): 48 раз
Поблагодарили: 2 раза
Контактная информация:

Архиватор tar создаёт архив из папки, но не из её содержимого

#3

16 дек 2019, 13:21

Спасибо за ссылку на перевод страницы man для tar. Я, конечно, сохраню её на будущее. А сейчас, как именно нужно написать строку tar, чтобы он создал архив из внутреннего содержимого папки, не включая весь внешний путь "/home/alex/NekPak" и сохранил архив в папке ArchivePak?

Аватара пользователя

rogoznik
Сообщения: 10044
Зарегистрирован: 27 июн 2017, 13:36
Решено: 129
Откуда: Нижний Тагил
Благодарил (а): 776 раз
Поблагодарили: 1958 раз
Контактная информация:

Архиватор tar создаёт архив из папки, но не из её содержимого

#4

16 дек 2019, 13:23

alexander8560, а головой подумать

Код: Выделить всё

tar -cvf arh.tar.gz ../NekPak
ИзображениеИзображение

no avatar

Автор темы
alexander8560
Сообщения: 31
Зарегистрирован: 12 ноя 2019, 11:02
Благодарил (а): 48 раз
Поблагодарили: 2 раза
Контактная информация:

Архиватор tar создаёт архив из папки, но не из её содержимого

#5

16 дек 2019, 18:35

Смотрите, пожалуйста, что он делает. Он запаковывает в архив всю папку NekPak (внешнюю) со всем её содержимым. Если потом открыть этот архив, там будет одна папка NekPak, а внутри этой папки будет всё её содержимое. Мне же надо, чтобы он упаковал всё содержимое этой папки, но саму папку не трогал, чтобы внутри архива было только содержимое папки, без внешней, так сказать, папки-оболочки.

Я попытался уже распаковать архив (в папку RaspakoArchive) так, чтобы распаковалось только содержимое. Он выдал ошибку. Если же распаковать просто архив, распакуется. Но вместе с внешней папкой NekPak, которая мне не нужна, понимаете?

Код: Выделить всё

alex@cnpt3d:~$ cd ~/ArchivePak
alex@cnpt3d:~/ArchivePak$ tar -cvf arh.tar.gz ../NekPak
tar: Removing leading `../' from member names
../NekPak/
../NekPak/a2.txt
../NekPak/NekPak2/
../NekPak/NekPak2/s3.txt
../NekPak/a1.txt
../NekPak/NekPak/
../NekPak/NekPak/b1.txt
alex@cnpt3d:~/ArchivePak$ tar --preserve-permissions --same-owner --directory=/home/alex/RaspakovaArchive -xvf arh.tar.gz/NekPak/
tar: arh.tar.gz/NekPak/: Cannot open: Not a directory
tar: Error is not recoverable: exiting now
alex@cnpt3d:~/ArchivePak$ tar --preserve-permissions --same-owner --directory=/home/alex/RaspakovaArchive -xvf arh.tar.gz
NekPak/
NekPak/a2.txt
NekPak/NekPak2/
NekPak/NekPak2/s3.txt
NekPak/a1.txt
NekPak/NekPak/
NekPak/NekPak/b1.txt
alex@cnpt3d:~/ArchivePak$ 
Вопрос, который я задаю, не праздный. Речь идёт о бэкапе Линукса. Я просто упростил вопрос вот этими абстрактными папками-файлами. Из-за того, что tar работает не так, как мне надо, не идёт бэкап. И поэтому я задался вопросом: а как же вообще этот tar работает. И стал проверять на этих абстрактных файлах-папках. Как заставить его сделать то, что надо?

В бэкапе есть две папки: /mnt/root и /mnt/backup. К первой, руту, примонтируется логический диск с Линуксом, ко второй, бэкапу, примонтируется сам архив, который делается с помощью tar. Да, он создаёт архив в папке /mnt/backup. Но когда он архивирует /mnt/root, то он архивирует не логический диск, а логический диск внутри папки-оболочки /mnt/root, понимаете? Вот эта папка-оболочка мне не нужна. Из-за неё не работает, как надо. В моём примере это папка-оболочка NekPak.

Аватара пользователя

slant
Сообщения: 4506
Зарегистрирован: 21 июн 2017, 18:09
Решено: 99
Благодарил (а): 51 раз
Поблагодарили: 1993 раза
Контактная информация:

Архиватор tar создаёт архив из папки, но не из её содержимого

#6

16 дек 2019, 18:53

Проще всего скриптом:

Код: Выделить всё

cd /path/to/files
tar -cf /absolite/path/to/archive.tar *
Первой строчкой переходим в каталог с файлами для архива. Во второй - архивируем, но задаем явно каталог куда класть результат.
Можно в одну строчку: cd /path/to/files && tar -cf /absolite/path/to/archive.tar *
(разделитель && - вторая команда после него выполнится, только если первая завершилась без ошибки)

Аватара пользователя

rogoznik
Сообщения: 10044
Зарегистрирован: 27 июн 2017, 13:36
Решено: 129
Откуда: Нижний Тагил
Благодарил (а): 776 раз
Поблагодарили: 1958 раз
Контактная информация:

Архиватор tar создаёт архив из папки, но не из её содержимого

#7

16 дек 2019, 18:56

Не по теме
slant, опередил :smile:
ИзображениеИзображение

no avatar

Автор темы
alexander8560
Сообщения: 31
Зарегистрирован: 12 ноя 2019, 11:02
Благодарил (а): 48 раз
Поблагодарили: 2 раза
Контактная информация:

Архиватор tar создаёт архив из папки, но не из её содержимого

#8

18 дек 2019, 14:53

Спасибо! Эта штука сработала. Линукс - замечательная вещь, его надо учить. Разобравшись с этим скриптом в моих файлах-примерах, буду теперь делать бэкап. :smile: :thumbs:

Закрыто

Вернуться в «Вопрос новичка и FaQ»

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 10 гостей