LINUX.ORG.RU

cat: имя файла в архиве

 ,


0

1

Всем доброго времени! Мне нужно добавить файл-картинку в архив с файлом базы данных, что-то вроде этого:

{ cat "/path/to/file.png"; mysqldump ...; } | bzip2 -1 -c > /path/to/archive.sql.bz2

И всё бы хорошо, но несмотря на то, что бинарные данные попали в архив, они там присутствуют как бы без имени, в результате чего архив даже нормально не распаковывается. Можно ли как-то задать имя этим бинарным данным в архиве? Чтобы в нём было два файла, например:

db.sql
some.png

Создавать промежуточные файлы на диске не хочется, нужно сделать именно одной командой. Это как-то возможно? Буду рад любым идеям, спасибо!

bzip это не архиватор, а компрессор. Это разные вещи, бывает, что архиватор содержит в себе компрессор, бывает что нет.

Имена файлов есть только в архиве. А уж можно ли одной командой создать архив из файла и двоичного потока (stdout какой-то комады) это отдельный вопрос.

mky ★★★★★ ()

man архиватор, man компрессор.

Используй tar короче, а не твори эту дичь.

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

Так в том и дело, что Tar'ом не получится объединить файл с результатами mysqldump'а на лету, ему в любмо случае только физические файлы нужны. Или я не прав? У меня с одной стороны результаты mysqldump'а, с другой - файл. Ну файл-то я ему могу подсунуть, а как быть с результатами дампа? Создавать для этого отдельный файл не вариант, потому что тогда понадобится дисковое пространство. А я ищу вариант без этого, и он уже вполне рабочий, если выстраивать конвейер по типу

mysqldump | bzip2 | openssl | ncftpput
- для базы данных и

tar | bzip2 | openssl | ncftpput

- для папок и файлов.

И всё бы хорошо, но мне нужно к mysqldump'у добавить дополнительный «вес», чтобы результат был не меньше 2 Мб (планирую использовать для хранения dfiles.ru, а там маленькие файлы не принимаются). Вот с этого места и начинается проблема.

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

А если не сжимать? Ты сначала сдимаешь, потом искусственно размер увеличиваешь.

kardapoltsev ★★ ()

Если нужно просто раздуть файл, то добавь к sqldump достаточное количество пробелов или пустых строк (LF) в конце (можно для этого использовать что то вроде 'yes «» | head -n 2000000'). И не сжимай результат.

ddos3 ()
Ответ на: комментарий от kardapoltsev

Так тоже не пойдёт, скрипт используется для разных проектов, где-то база 100 Кб, а где-то 5 Гб. Не сжимать 5 Гб это как-то неэкономично в плане трафика.

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

Дописывайте картинку (мусор) в конец сжатого файла. Тогда при разворачивании будет просто:

decompression OK, trailing garbage ignored

mysqldump | bzip2 | cat - /path/to/file.png | openssl | ncftpput

Или пишите какой-то свой архиватор, лично я не знаю, какой архиватор может засовывать в архив файл с stdin. Делайте не сжатый архив, в котором лежит сжатый дамп базы, а потом дописывайте в архив картику/мусор. Вот тут что-то подобное http://unix.stackexchange.com/questions/214542/is-it-possible-to-make-a-tar-g... .

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