tar-файли з іншого каталогу, не копіюючи їх


10

Для експертів тут це повинно бути дуже простим.

У мене є обліковий запис Linux з дисковою квотою користувача лише 6 Гб. Існує деяка папка даних /optз приблизно 3 ГБ даних, при стисненні з'являється 1 Гб. Всередині є деякі символьні посилання data-folder. Зазвичай для резервного копіювання роботи я робив наступне.

cp -rvfL /opt/data-folder ~/
cd ~/
tar -zcvf data-folder.tar.gz data-folder
rm -rvf data-folder

Тепер я вже спожив 2,5 Гб у своїй дисковій квоті користувачів, у мене достатньо місця, щоб скопіювати файли додому, але не tarзнову.

Чи є спосіб націлити та скопіювати папку в одній команді, скажімо, використовуючи трубу.

PS Я не /optможу взяти участь, тому що я лише читаю доступ до /opt.


Ви, звичайно, можете ввімкнути / вибрати, не можете там писати , ось і все. Прапор 'f' на tar (3) говорить про те, щоб депонувати результат у цьому файлі, що цілком може бути деінде. Тобто, cd /opt; tar zcf $HOME/junk.tar.gz junk.
vonbrand

Відповіді:


5

Ви хочете створити файл смоли далеко від місця, в якому знаходяться файли, потрібні для tar.

Є багато способів зробити це.

Якщо його потрібно створити локально (= на одній машині):

tar czvf /path/to/destination/newfile.tar.gz  ./SOURCEDIR_OR_FILES

Ви можете додати додаткові файли або каталоги, щоб позначити tar в кінці цієї команди.

Якщо його потрібно створити віддалено (тобто, ви бажаєте створити файл tar на віддаленому хості з того, що містить дані, які слід розміщувати):

tar czvf - ./SOURCEDIR_OR_FILES | ssh user@host 'cat > newfile.tar.gz'

Пізніша версія дуже універсальна. Наприклад, ви також можете "копіювати" каталог + підкаталоги, використовуючи ту саму техніку:

Скопіюйте каталог + підкаталоги в інший локальний каталог:

tar cf - ./SOURCEDIR_OR_FILES | ( cd LOCAL_DEST_DIR && tar xvf - )

Скопіюйте каталог + підкаталоги до іншого віддаленого каталогу:

tar cvf - ./SOURCEDIR_OR_FILES | ssh user@host 'cd REMOTE_DEST_DIR && tar xf - '

Відкиньте "v", якщо вам він не потрібен, щоб відображати файли в мірі позначення (або без позначення): воно піде набагато швидше, але не скаже багато, якщо не буде помилки.

Я використовую ". / ..." для джерела, щоб змусити дьоготь зберігати його як ПОВ'ЯЗНИЙ шлях. У деяких випадках потрібно додати додаткову інформацію про шлях:

Наприклад, для націлювання на файли crontab, включаючи файл в / etc, ви можете зробити:

cd / ; tar czf all_crons.tgz  ./etc/*cron*  ./var/spool/cron

Я спеціально використовую відносний шлях: деякі СТАРІ версії tar можуть бути небезпечними та витягувати файли з оригінальним шляхом GLOBAL, тобто ви можете це зробити: cd /safedir ; tar xvf sometarі файли з глобальними іменами перезаписують файли за їх початковим шляхом, який є ВІД / safedir а не під ним! Дуже небезпечно і все ще можливо, оскільки там є старі сервери виробництва. Краще використовувати весь час відносні шляхи, навіть якщо ви використовуєте більш пізній тар.


інша не про відмінності між тарами: на деяких, можливо, вам доведеться використовувати -cvfзамість cvf, інші не розпізнають -стиль. І zраніше означало "стиснути з" стиснути ", але на" недавньому "дьогті означає" стиснути за допомогою gzip ". Ви можете знати , яка використовується стиснення на файл з: file zefile. А потім перейменуйте його відповідно (якщо використовувати дьоготь compress, його краще перейменувати .tar.Z не .tar.gz)
Олів'є Дулак

0

Використовуйте -hваріант дьогтю. На чоловіковій сторінці:

-h, --dereference
don't archive symlinks; archive the files they point to

щоб ви могли використовувати tar -zcvfh data-folder.tar.gz /opt/data-folder


Ох, я повинен був це згадати, я вже спробував tar -zcvfh ~ / data-folder.tar.gz / opt / data-folder. Я потрапляю в якусь проблему кругового архіву. Я продовжую копіювати деякі файли і ніколи не закінчується.
Камат

Схоже, у підпапці даних є кругова символічна посилання.
Камат

2
@AUZKamath, це помилка в тарі GNU. Ви можете спробувати bsdtarзамість цього, або pax( cd /opt && pax -Lw data-folder | gzip > ~/data-folder.tar.gz), який би
виявляв

1
@AUZKamath Ви можете одночасно націлювати та видаляти файли з домашнього каталогу, tar -rf <tarfilename> <filename>щоб додати їх до існуючого файлу tar.
harish.venkat

1
@Stephane Chazelas, це працює, ви повинні поставити це як відповідь.
Камат
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.