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

Создайте файл со скрытыми файлами/каталогами, если вам нужно сделать резервную копию

Пример:

vim includeFile.list

.xpto.conf
.my.cfg

И выполнить rsync

rsync -avz --include-from=includeFile.list --exclude=".*" source/ destination/
1
08.07.2019, 08:41
2 ответа

Здесь не может быть никакой хитрости. Пропустить байты просто, потому что вы можете вычислить позицию в файле, с которой начать. Но вы не можете вычислять со строками переменной длины, не проверяя для каждого символа, является ли он разрывом строки.

Подумайте о книге :Если вы хотите найти страницу 42, вы можете сосчитать страницы до 42, даже не глядя на нее. Для четко определенной толщины страницы вы даже можете использовать линейку, чтобы измерить, где находится страница 42. Но если вы хотите найти пятую главу, вам нужно просмотреть все страницы, чтобы увидеть, где начинается новая глава.

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

0
27.01.2020, 23:30

Вы читаете все байты и подсчитываете, сколько раз встречается байт 10 (\n). Его n -е появление непосредственно предшествует n +1-й строке.

К сожалению, это не уловка, а просто единственно возможный подход.

Существуют файловые системы, ориентированные на запись -на некоторых платформах, которые могут разрешать прямой поиск по строке (, например, на VMS и z/ OS ), но эти файловые системы не распространены ни на одной из ваших платформ. Unix и POSIX рассматривают файлы как потоки байтов и не предоставляют никакой дополнительной абстракции.

0
27.01.2020, 23:30

Теги

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