У меня есть несколько файлов размером> 1 ГБ каждый. Мне нужно удалить последние несколько байтов из файлов. Как мне это сделать? Я предпочитаю редактировать файл на месте, чтобы сэкономить место на диске.
Я нахожусь на HP-UX.
У меня есть несколько файлов размером> 1 ГБ каждый. Мне нужно удалить последние несколько байтов из файлов. Как мне это сделать? Я предпочитаю редактировать файл на месте, чтобы сэкономить место на диске.
Я нахожусь на HP-UX.
Ответы:
Попробуйте использовать hexedit. Я не пробовал его в HP-UX, но он должен работать. Это позволяет вам перейти к месту в файле и обрезать. Я уверен, что он не читает весь файл, а просто ищет подходящее место для отображения.
Использование довольно просто, как только вы запустите его, клавиши со стрелками позволяют перемещаться. F1 дает помощь. Ctrl-G перемещается к месту в файле (подсказка: чтобы перейти к концу, используйте размер файла из нижней строки дисплея). Поместите курсор на первый байт, который вы хотите обрезать, и затем нажмите Escape T, как только вы подтвердите, что усечение будет выполнено. Ctrl-x выходит.
Вырезать 2 килобайта из конца файла:
truncate -s-2K file
Вы можете использовать дд например:
dd if=yourfile of=outname bs=4k count=thefirstX4kb
Используйте инструмент, который дает вам доступ к truncate
системному вызову. Вы можете сделать это только с помощью инструментов POSIX. Предупреждение, набранное в браузере; будьте особенно осторожны, так как dd
ошибки еще более беспощадны, чем обычная команда unix. 123456 - это количество байтов для хранения.
dd if=/dev/null of=/file/to/truncate seek=1 bs=123456
Версия Perl гораздо более читабельна:
perl -e 'truncate "$ARGV[0]", 123456 or die $!' /file/to/truncate
Вы можете использовать split
или ed
, awk
или любой язык программирования.
vim
имеет предел 4G (может быть неправильно), но я не думаю, что он делает это на месте (может быть неправильно).