Предложите метод сжатия файла при отсутствии свободного места ФС
Модераторы: /dev/random, Модераторы разделов
-
- Сообщения: 229
- ОС: Windows Vista
Предложите метод сжатия файла при отсутствии свободного места ФС
Есть файл - пусть 20 Гб, на ФС 1 - 2 Гб свободного места. Предложите варианты сжатия исходного файла без привлечения внешних/сетевых носителей.
Файл должен быть сжат как единое целое, т.е. с возможностью его использования в приложениях.
Варианты есть, нужен вариант без временных файлов (не считая самого гз бз2) и вариант распаковки сжатого без наличия свободного места, зная, что свободное+архив достаточно для распаковки
(Все в пределах штатных и общедоступных команд/утилит шела)
Файл должен быть сжат как единое целое, т.е. с возможностью его использования в приложениях.
Варианты есть, нужен вариант без временных файлов (не считая самого гз бз2) и вариант распаковки сжатого без наличия свободного места, зная, что свободное+архив достаточно для распаковки
(Все в пределах штатных и общедоступных команд/утилит шела)
Я конечно далек от мысли...(с)
-
- Модератор
- Сообщения: 21261
- Статус: nulla salus bello
- ОС: Debian GNU/Linux
Re: Предложите метод сжатия файла при отсутствии свободного места ФС
Файл насколько сильно жмётся, в нём текст? А оперативки сколько?
Пишите правильно:
в консоли вку́пе (с чем-либо) в общем вообще | в течение (часа) новичок нюанс по умолчанию | приемлемо проблема пробовать трафик |
-
- Сообщения: 229
- ОС: Windows Vista
Re: Предложите метод сжатия файла при отсутствии свободного места ФС
Bizdelnick писал(а): ↑27.08.2012 22:46Файл насколько сильно жмётся, в нём текст? А оперативки сколько?
а в сабже не понятен размер файла ?
предположим заданный в сабже размер файла, т.е. 20 Гб, свободного места ФС 1 Гб, ОЗУ свободно или все 256 Мб
+ и нет внешних хранилищь
Я конечно далек от мысли...(с)
-
- Модератор
- Сообщения: 21261
- Статус: nulla salus bello
- ОС: Debian GNU/Linux
Re: Предложите метод сжатия файла при отсутствии свободного места ФС
Непонятен хотя бы приблизительный размер файла после сжатия. И непонятно, сколько файл реально занимает на диске. Хотя прочих условий достаточно, чтобы сказать, что сие почти наверняка невозможно.
Пишите правильно:
в консоли вку́пе (с чем-либо) в общем вообще | в течение (часа) новичок нюанс по умолчанию | приемлемо проблема пробовать трафик |
-
- Сообщения: 229
- ОС: Windows Vista
Re: Предложите метод сжатия файла при отсутствии свободного места ФС
ФС одна однешенька
есть файл в ФС - его размер 20 Гб
есть свободного места в ФС - 1-2 Гб
степень сжатия файла неизвестна (но более 1)
есть ОЗУ - 256-1024 Мб
нужно сжать исходный файл с заменой несжатого на сжатый
методы ? (желательно без временных файлов, с временными метод существует)
Можно и с временными - может будет интересен метод.
есть файл в ФС - его размер 20 Гб
есть свободного места в ФС - 1-2 Гб
степень сжатия файла неизвестна (но более 1)
есть ОЗУ - 256-1024 Мб
нужно сжать исходный файл с заменой несжатого на сжатый
методы ? (желательно без временных файлов, с временными метод существует)
Можно и с временными - может будет интересен метод.
Я конечно далек от мысли...(с)
-
- Администратор
- Сообщения: 5405
- ОС: Gentoo
Re: Предложите метод сжатия файла при отсутствии свободного места ФС
Есть (опасный) вариант: dd'шкой читаем файл большими блоками, передаём компрессору, другой dd'шкой пишем обратно без обрезания. В конце смотрим, сколько записалось, и обрезаем.
Не делайте этого, если не уверены, что в файле нет плохо сжимаемых частей. Не делайте этого, если используете btrfs или что-то подобное. Не делайте этого, если есть риск, что процесс что-то прервёт.
Метод непригоден для декомпрессии.
Не делайте этого, если не уверены, что в файле нет плохо сжимаемых частей. Не делайте этого, если используете btrfs или что-то подобное. Не делайте этого, если есть риск, что процесс что-то прервёт.
Метод непригоден для декомпрессии.
-
- Сообщения: 229
- ОС: Windows Vista
Re: Предложите метод сжатия файла при отсутствии свободного места ФС
/dev/random писал(а): ↑27.08.2012 23:28Есть (опасный) вариант: dd'шкой читаем файл большими блоками, передаём компрессору, другой dd'шкой пишем обратно без обрезания. В конце смотрим, сколько записалось, и обрезаем.
Не делайте этого, если не уверены, что в файле нет плохо сжимаемых частей. Не делайте этого, если используете btrfs или что-то подобное. Не делайте этого, если есть риск, что процесс что-то прервёт.
Метод непригоден для декомпрессии.
метод близок к существующему
опасности в потере не существует
а теперь пожалуйста напишите как Вы будете обрезать от начала ?
архив нужен такой же как если бы был сделан при достаточности свободного пространства
Я конечно далек от мысли...(с)
-
- Администратор
- Сообщения: 5405
- ОС: Gentoo
Re: Предложите метод сжатия файла при отсутствии свободного места ФС
Простейший способ узнать требуемую длину (bash only):
(... | tee >(wc -c >&3) | ...) 3>&1
Если шелл не поддерживает конструкцию >( ), придётся, например, парсить stderr-вывод dd или делать второй (точнее, предварительный) проход сжатия.
Когда длина известна, обрезать файл можно с помощью dd или truncate.
-
- Сообщения: 229
- ОС: Windows Vista
Re: Предложите метод сжатия файла при отсутствии свободного места ФС
как обрезать от начала ?
Я конечно далек от мысли...(с)
-
- Администратор
- Сообщения: 5405
- ОС: Gentoo
Re: Предложите метод сжатия файла при отсутствии свободного места ФС
Зачем?
Вы, видимо, меня не поняли. Вы, похоже, решили, что я предлагаю _дописывать_ сжатые данные в файл. Вы не правы. Я не зря назвал метод опасным. То, как вы меня поняли, было бы безопасно... если бы работало. Я же предлагаю писать _поверх_.
Не хотелось приводить команду целиком, чтобы кто-нибудь вдруг не применил её на важных данных, но...
truncate -s $( (dd if=file bs=256M | xz | tee >(wc -c >&3) | dd of=file conv=notrunc) 3>&1) file
Да, я в курсе, что если некоторый фрагмент файла, считая от начала, окажется после сжатия длиннее, чем до, то перезапишутся ещё не прочитанные данные. Поэтому я и написал, что метод нельзя применять, если вы не уверены в сжимаемости каждого фрагмента файла. И поэтому я написал, что читать нужно большими блоками (в примере - 256M): это несколько уменьшит "флуктуации" сжимаемости.
-
- Сообщения: 229
- ОС: Windows Vista
Re: Предложите метод сжатия файла при отсутствии свободного места ФС
т.е. обрезать и в подстановке сразу сжимать ?
если верно понимаю, то вариант
на текущтй момент действует авриант разбиение исходного файла с нумерацией от обратного и потоком последовательное сжате с удалением отправленного куска (файла)
спасибо (если верно понял) - сделаю и такой вариант Вами предложенный
и еще попутно - существует ли возможность создания из шела временных файлов - как FILE_ATTRIBUTE_TEMPORARY ?
если верно понимаю, то вариант
на текущтй момент действует авриант разбиение исходного файла с нумерацией от обратного и потоком последовательное сжате с удалением отправленного куска (файла)
спасибо (если верно понял) - сделаю и такой вариант Вами предложенный
и еще попутно - существует ли возможность создания из шела временных файлов - как FILE_ATTRIBUTE_TEMPORARY ?
Я конечно далек от мысли...(с)
-
- Администратор
- Сообщения: 5405
- ОС: Gentoo
Re: Предложите метод сжатия файла при отсутствии свободного места ФС
Скорее, сжать и обрезать, а не обрезать и сжать, т.к. соманда truncate будет выполнена лишь после того, как отработает всё остальное.
* первая dd читает файл
* xz сжимает его
* tee копирует сжатый поток на счётчик wc
* вторая dd перезаписывает данные в файле сжатыми
* когда процесс завершается, wc выдаёт длину сжатых данных
* эта длина подставляется в truncate
* файл обрезается по этой длине.
-
- Сообщения: 229
- ОС: Windows Vista
Re: Предложите метод сжатия файла при отсутствии свободного места ФС
/dev/random писал(а): ↑28.08.2012 00:38
Скорее, сжать и обрезать, а не обрезать и сжать, т.к. соманда truncate будет выполнена лишь после того, как отработает всё остальное.
* первая dd читает файл
* xz сжимает его
* tee копирует сжатый поток на счётчик wc
* вторая dd перезаписывает данные в файле сжатыми
* когда процесс завершается, wc выдаёт длину сжатых данных
* эта длина подставляется в truncate
* файл обрезается по этой длине.
не суть, понятно
Я конечно далек от мысли...(с)
-
- Сообщения: 8735
- Статус: GPG ID: 4DFBD1D6 дом горит, козёл не видит...
- ОС: Slackware-current
Re: Предложите метод сжатия файла при отсутствии свободного места ФС
no way в общем случае.
/dev/random писал(а): ↑27.08.2012 23:28Есть (опасный) вариант: dd'шкой читаем файл большими блоками, передаём компрессору, другой dd'шкой пишем обратно без обрезания. В конце смотрим, сколько записалось, и обрезаем.
я-бы не стал пользоваться такими методами...
man 1 mktemp
не?
-
- Сообщения: 3408
- Статус: аватар-невидимка
- ОС: openSUSE Tumbleweed x86_64
Re: Предложите метод сжатия файла при отсутствии свободного места ФС
Можно дополнить вариант /dev/random'а буфером во временном файле, если сжатый блок превысил размер исходного. Но на shell'е такое сделать, наверное, сложновато. Я бы на Си писал. Хотя может просто потому, что я его значительно лучше знаю.
-
- Сообщения: 229
- ОС: Windows Vista
Re: Предложите метод сжатия файла при отсутствии свободного места ФС
man 1 mktemp
не?
Нет, нужно что то подобное tmpfs, но как атрибут объекта (файла)
Я конечно далек от мысли...(с)
-
- Бывший модератор
- Сообщения: 2760
- ОС: Debian; gentoo
Re: Предложите метод сжатия файла при отсутствии свободного места ФС
есть такое - stdbuf.
Солнце садилось в море, а люди с неоконченным высшим образованием выбегали оттуда, думая, что море закипит.
-
- Сообщения: 1261
- Статус: Никто, по сути быдло
Re: Предложите метод сжатия файла при отсутствии свободного места ФС
Все это садомазохизм.
Если у компа есть сеть, все решается netcat http://blog.vpsville.ru/blog/howto/10.html
Если usb , то большой флешкой.
Если DVD, то записью кусками
Если у компа есть сеть, все решается netcat http://blog.vpsville.ru/blog/howto/10.html
Если usb , то большой флешкой.
Если DVD, то записью кусками