Как я могу сжать файл в Linux на месте, не используя дополнительное дисковое пространство?

У меня есть накопитель на 100 ГБ, в котором есть 95-гигабайтный файл. Мне нужно освободить место на диске (и прямо сейчас передача файла с диска не является вариантом). Файл будет хорошо сжиматься с помощью gzip или bz2 или что-то еще, но все эти программы записывают сжатый файл в отдельный файл. У меня недостаточно свободного места для этого.

Есть ли способ использования стандартных инструментов сжатия или других утилит Unix для сжатия файла без использования дополнительного дискового пространства (или, по крайней мере, минимального объема дополнительного дискового пространства)? Я представляю что-то, что сжимает часть файла за раз и записывает результаты непосредственно над файлом. Я понимаю, что это было бы рискованно, так как файл был бы поврежден, если бы сжатие было прервано, но я не думаю, что у меня есть выбор.

  • Не удалось разрешить имя хоста ip
  • Где мое дисковое пространство?
  • Компьютер не загружается в окна
  • Как синхронизировать два цикла видео с mplayer и upd?
  • Настройка конфигурации мультисезона
  • Как установить Bash на Ubuntu в Windows 10?
  • Как создать относительную символическую ссылку в Linux?
  • Как найти беспроводной адаптер USB в файле журнала dmesg?
  • 4 Solutions collect form web for “Как я могу сжать файл в Linux на месте, не используя дополнительное дисковое пространство?”

    Это доказательство концепции bash one-liner, но это должно заставить вас начать. Используйте на свой риск.

     truncate -s `gzip -c file | dd of=file conv=notrunc 2>&1 | sed -n '$ s/ .*$// p'` file mv file file.gz 

    Это работает путем передачи gz-данных в dd-процесс, который записывает его обратно в тот же файл. По завершении файл усекается до размера вывода gz.

    Это предполагает, что последняя строка вывода dd соответствует:

    4307 байт (4,3 kB) скопировано, 2,5855e-05 с, 167 Мбайт / с

    Где первое поле представляет собой целое число байтов. Это размер, в который файл должен быть усечен. Я не уверен на 100%, что выходной формат всегда один и тот же.

    Это не так, что gzip и bzip2 перезаписывают оригинал. Скорее, они записывают сжатые данные на диск в качестве нового файла, и если эта операция завершается успешно, они отсоединяют исходный несжатый файл.

    Если у вас достаточно ОЗУ, вы можете написать сценарий для временного сжатия файлов в файловой системе tmpfs , затем удалить оригинал на диске и заменить его на сжатую версию. Может быть, что-то вроде этого:

     # some distributions mount /dev/shm as tmpfs; replace with bzip2 if you prefer if gzip -q9c /full/disk/somefile > /dev/shm/somefile.gz then rm -f /full/disk/somefile && mv -i /dev/shm/somefile.gz /full/disk fi 

    Просто помните об использовании памяти, поскольку tmpfs – это, по сути, RAM-диск. Большой выходной файл может легко голодать в системе и вызывать другие проблемы для вас.

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

    Команды split и csplit могут использоваться для разделения большого файла на более мелкие части, а затем сжимать их индивидуально. Однако сборка была бы довольно трудоемкой.

    Interesting Posts

    Зеленые мерцающие пиксели, которые движутся с черными изображениями

    Windows 7: системные часы на 2 часа сзади при каждой загрузке

    Стоит ли использовать кабельный модем DOCSIS 3 для премиального кабельного интернет-сервиса?

    Что происходит, когда ноутбуки достигают 100% заряда?

    Tmux против экрана

    Как я могу уменьшить изображение моей VMware?

    Сделать формулу массива в excel вычислять только по активным строкам

    Как указать расположение библиотек в двоичном формате? (Linux)

    Hyper-Threading и Dual-Core, в чем разница?

    Могу ли я сделать Ctrl + Alt + Del прямо в диспетчере задач в Windows 7?

    Есть ли клавиатуры с физическим переключателем qwerty-dvorak?

    Запуск кабеля cat5 на открытом воздухе

    Должен ли я быть обеспокоен, если мой хостинг-провайдер Git хранит пароли в открытом виде?

    Почему 64-битный Ubuntu не рекомендуется для ежедневного использования?

    Доступ к файлам журналов Windows из linux

    Давайте будем гением компьютера.