LINUX.ORG.RU

[shell] seek X bytes, read Y bytes

 


0

1

Есть ли годная утилита, желательно из coreutils или встроенная команда баша, которая может прочитать из файла несколько байт с определенной позиции?

Устроил бы dd, но он оперирует блоками и насколько я понял там невозможно нормально работать с байтами, кроме как установит ibs=1, но при этом чтение файла становится очень медленным, оно и понятно.

Несколько байт, которые вам нужно, прочитаются хоть как быстро, хоть bs=1, хоть bs=100. Просто смещение нужно задавать через skip= , тогда байты не будут считываться, а будет syscall lseek().

mky ★★★★★
()
Ответ на: комментарий от GotF

Но всего лишь раз в десять, что всё равно очень медленно.

GotF ★★★★★
()
Ответ на: комментарий от Olegymous

Неа... Я напутал немного. В смысле, увеличивает, если опция была bs, т.е. и выход был 1 байт. Короче, смотри пост чуть выше (=

GotF ★★★★★
()
Ответ на: комментарий от GotF

О, за tail спасибо, не заметил в мане `+' Похоже получается самый годный способ такой:

tail -c+$(($offset+1)) | head -c$bytes_to_read

Я правильно понимаю, что когда head закончит читать tail должен закончить писать?

Olegymous ★★★
() автор топика
Ответ на: комментарий от Olegymous

Я правильно понимаю, что когда head закончит читать tail должен закончить писать?

Затестил, заканчивает. Видимо SIGPIPE получает. Значит такое решение очень даже быстрое. Пропустил имя файла в предыдущем сообщении

tail -c+$(($offset+1)) "$filename" | head -c$bytes_to_read

Olegymous ★★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.