Как можно обрезать файлы с помощью командной строки?

Можно использовать reset команда, которая сбросит терминальные настройки.

18
21.12.2012, 01:47
3 ответа

Вообще говоря, просто используйте dd; но поскольку Вы упоминаете использование виртуализации KVM, Вы могли бы рассмотреть использование qemu-img:

qemu-img create -f raw disk 2G

Это делает то же как dd команда в ответе Chris Down, эффективно.

Независимо от того, какую команду Вы используете для использования в виртуализации, я настоятельно рекомендовал бы использовать fallocate предварительно выделить блоки для предотвращения выполнения фрагментации и увеличения.

fallocate -l 2G disk

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

8
27.01.2020, 19:46
  • 1
    Действительно ли кавычка является опечаткой? –  badp 20.12.2012, 16:32
  • 2
    @badp, да, зафиксированный. –  gertvdijk 20.12.2012, 16:32
  • 3
    qemu-img и dd оба выполняют один системный вызов для установки (ftruncate) размера файла, но будут работать намного больше для загрузки себя и библиотек, с которыми они связаны. И, в том отношении, dd будет намного более эффективным, чем qemu-img (который намного больше и связан с намного большим количеством библиотек). GNU truncate будет еще более эффективным. dd также имеет преимущество того, чтобы быть повсеместным. Положительная сторона у fallocate все же. –  Stéphane Chazelas 20.12.2012, 19:42
  • 4
    @StephaneChazelas I, полностью второй Ваш комментарий. Я отредактировал свой ответ для указания на это qemu-img просто очевидная альтернатива в использовании виртуализации KVM. –  gertvdijk 21.12.2012, 02:09

Можно создать редкий файл как это с dd:

dd of=file bs=1 seek=2G count=0
$ du file
0       disk
$ du --apparent-size file
2097152 disk
14
27.01.2020, 19:46
  • 1
    Кроме того, 2G расширение GNU dd. Можно использовать bs=1024 seek=2097152 если у Вас нет GNU dd. заключение в кавычки –  Chris Down 20.12.2012, 16:29
  • 2
    Heh, G расширение, и оно не поддерживается версией OpenBSD dd..., но, M и K поддерживаются, так возможно, seek=2048M более читаемо, в зависимости от каких платформ Вы нацелены –  Earlz 20.12.2012, 22:01
  • 3
    Необходимо читать из/dev/zero: если =/dev/zero –  Daniel Fanjul 25.12.2012, 23:03
  • 4
    @DanielFanjul, Почему? Нет абсолютно никакого различия, никакие байты не записаны. –  Chris Down 25.12.2012, 23:39
  • 5
    @ChrisDown, поскольку/dev/null не содержит данных, когда Вы читаете, но/dev/zero содержит бесконечные нули. О, count=1, число байтов для записи не должно быть нулем. –  Daniel Fanjul 26.12.2012, 20:39

См. также GNU truncate команда:

truncate -s 2G some-file
6
27.01.2020, 19:46

Теги

Похожие вопросы