Я хочу уменьшить размер файла с помощью грубой силы, то есть мне все равно, я просто хочу разрезать файл, скажем, наполовину и отказаться от остальных.
Первое, что приходит на ум - это усечение Perl . Я следую примеру на этой странице и сделал то же самое:
seq 9 > test.txt
ls -l test.txt
perl -we 'open( FILE, "< ./test.txt" ) && truncate( FILE, 8 ) && close(FILE);'
Но файл все еще имеет тот же размер:
$ ls -lgG test.txt
-rw-rw---- 1 18 2013-08-08 09:49 test.txt
Как я могу сделать эту работу?
открывает файл для чтения. Однако для усечения файла вам необходимо изменить его, поэтому дескриптор файла только для чтения не будет работать. Вам нужно использовать режим «изменить» (
"+>"
).Как побочный вопрос, меня всегда удивляет, когда люди позволяют системным вызовам молчать, а затем спрашивают, что пошло не так. Существенная часть диагностики проблемы смотрит на сообщении об ошибке производстве; даже если вы этого не понимаете, это делает жизнь намного проще для тех, кого вы просите о помощи.
Следующее было бы несколько более полезным:
хотя по общему признанию это только сообщило бы "неверный аргумент". Тем не менее, это полезная информация, которая могла бы привести вас к выводу, что режим открытия был неправильным (как это было для меня).
источник
Вы можете использовать,
tail
чтобы сократить последние 100000 байт, например:-c выводит последние 100000 байт файла, для дополнительных опций:
Чтобы заменить исходный файл только что созданным файлом:
источник
Ответ выше со ссылкой на усечение хорош. дд также сделает работу:
источник
Существует совершенно другой способ сделать это, используя bash, используя программу ed. следующий скрипт сохранит только последние 5000 строк всех файлов, находящихся в указанном каталоге. это может быть легко изменено, чтобы зациклить несколько каталогов, изменить количество строк и т. д.
источник