Страница 1 из 1

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

Добавлено: 16 дек 2019, 13:08
alexander8560
Домашняя папка /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?

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

Добавлено: 16 дек 2019, 13:10
symon2014

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

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

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

Добавлено: 16 дек 2019, 13:23
rogoznik
alexander8560, а головой подумать

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

tar -cvf arh.tar.gz ../NekPak

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

Добавлено: 16 дек 2019, 18:35
alexander8560
Смотрите, пожалуйста, что он делает. Он запаковывает в архив всю папку 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.

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

Добавлено: 16 дек 2019, 18:53
slant
Проще всего скриптом:

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

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

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

Добавлено: 16 дек 2019, 18:56
rogoznik
Не по теме
slant, опередил :smile:

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

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