LINUX.ORG.RU
решено ФорумAdmin

Как запаковать в tar текущую папку без полных путей

 ,


0

0

Гуглил, может плохо гуглил, но лучше не вышло. Проблема следующая.

Есть папка /nohome/nouser/nofolder/ в ней есть еще куча вложенных папок и файлов в том числе и с точкой в начале. И лежит эта папка на компе номер 1.

Имя папки я получаю в скрипте виде $foldername Мне надо запаковать содержимое в архив так чтобы в архиве не было начального пути типа /nohome/nouser/nofolder/

Потому что на компе номер 2 распаковываться все это будет тоже в папку /nohome1/nouser1/nofolder1/ которую скрипт тоже получает в виде $foldername

Неизвестна ни вложенность ни намеки на имена. То есть содержимое $foldername может быть ЛЮБЫМ.

Но все это еще не самое главное. Этих самых $foldername всего примерно 3 плюс-минус 100 и все разные. Но даже и это еще не всё. Еще надо паковать с ключом -g и более того, точка из которой будет идти упаковка и распаковка тоже может меняться. То есть сегодня скрипт работает из папки ~/backup а завтра к примеру из папки ~/bak

в итоге получился вот такой монстр:

ttt=$(pwd)
cd $foldername1
tar -cpzf $ttt/bak1.tar.gz -g $ttt/bak1.snar –exclude=$samefolder1 ./
cd $foldername2
tar -cpzf $ttt/bak2.tar.gz -g $ttt/bak2.snar –exclude=$samefolder2 ./
cd $foldername3
tar -cpzf $ttt/bak3.tar.gz -g $ttt/bak3.snar –exclude=$samefolder3 ./
cd $ttt

Это конечно работает. Но как-то не элегантно. Неужели никак нельзя без выкрутасов со скачками по разным папкам?

Я реальный скрипт упростил чтобы не захламлять вопрос. В реальном скрипте есть еще много чего включая примерно такие конструкции timestamp=$(date +‘%Y-%m-%d_%H:%M:%S’) и их обработки так что скачки по папкам реально мешают. Их и так там получается не мало и без скачков для архивирования.

Неужели никак нельзя без выкрутасов со скачками по разным папкам?

Ответ:

Неизвестна ни вложенность ни намеки на имена. То есть содержимое $foldername может быть ЛЮБЫМ.

anonymous
()

перенести в корневую директорию нужную папку там её архивировать потом нажать отмену переноса

Gennadevich
()
Ответ на: комментарий от anonymous

И как тот факт что путь передается в виде переменной, а не открыто мешает отказаться от использования cd ?

AfterWork
() автор топика
Ответ на: комментарий от Gennadevich

Не вариант когда речь идет о гигабайтах данных и т.п. тем более что речь идет о скрипте. а на данных в момент исполнения скрипта работают сервисы. так что перенос не вариант.

AfterWork
() автор топика
Ответ на: комментарий от AfterWork

И как тот факт что путь передается в виде переменной

Ты о чём? Бредишь? Причём здесь переменная?

anonymous
()
Ответ на: комментарий от post-factum

Я пробовал изголяться с -С но суть в том что не смог сообразить как передать tar что именно ему архивировать.

AfterWork
() автор топика
Ответ на: комментарий от anonymous

Бредишь тут только ты. А вот спасибо хорошему человеку с ником post-factum он таки помог мне сообразить что я делал не так когда использовать директиву -C

AfterWork
() автор топика
Ответ на: комментарий от AfterWork

Я пробовал изголяться

Можешь изголяться как хочешь, но ни tar, ни скрипт порядок на компе за тебя не наведут! В этом весь сыр-бор, в этом и «проблема»!

anonymous
()
Ответ на: комментарий от post-factum

Спасибо за подсказку. Видимо надо было написать вопрос и получить от Вас очевидный ответ чтобы сообразить что я делал не так.

Правильно вот так:

tar -cpzf ./bak1.tar.gz -g ./bak1.snar –exclude=$foldername$samefolder1 -C $foldername ./

AfterWork
() автор топика
Ответ на: комментарий от anonymous

Сразу видать гордого админа локалхоста. Анонимус он такой, не забывает, не прощает, но в лужу пердит отменно.

pinus_nigra
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.