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

Как заархивировать вывод mysqldump совместно с обычными файлами?

 


1

1

Нужна запись типа tar cjf - file1.txt file2.txt `mysqldump ...` Т.е. без предварительного дампа базы в файл, ибо все это уходит в пайп по ssh и создавать файл дампа большой БД не хочется.

Подскажите как такое провернуть?

tar -cj file1.txt file2.txt <(mysqldump ...)

Два комментария:

  • tar -f - — масло масляное, по умолчанию (если файл не указывать) tar и так пишет в стандартный вывод;
  • <(...) — башовая конструкция «подстановка процесса»: запускает процесс и подставляет имя файла-пайпа, из которого можно читать стандартный вывод этого процесса.
intelfx ★★★★★
()
Последнее исправление: intelfx (всего исправлений: 1)
Ответ на: комментарий от intelfx

tar -f - — масло масляное

мне без него не понятно, приходится вспоминать. Я привык -f, наверное ты тоже.

тоже вставлю комментарий: тут может лучше mysqldump | tar, что-бы засунуть между ними ssh. Но два лишних файла передать так не получится. Не знаю, надо оно.

emulek
()
Ответ на: комментарий от intelfx

а оно заархивирует файл пайпа или содержимое пайпа?

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

У меня такая конструкция:

tar -cj file1.txt file2.txt <(mysqldump ...)

создаёт архив, в котором лежит файл-пайп (/dev/fd/63), но без содержимого. Gnu tar 1.28.

mky ★★★★★
()
Ответ на: комментарий от intelfx

Посмотрел, походу Dimez'у делать было нечего :-)

Сейчас думаю, вобще, возможно ли выдать на stdout архив в формате tar не зная размера записываемого туда файла (получая данные из stdin/pipe). Если не путаюсь, то в начале tar-архива лежит блок, где описываются все файлы (имя и размер).

Получается, что чтобы начать писать tar-архив нужно, либо прочиать и где-то сохранить входящие с stdin данные (в памяти или временном файле), либо писать tar-архив в файл на диске (с произвольным доступом) и потом править заголовочный блок. Но во втором случае уже не получится создать tar.gz и прочие сжатые архивы.

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