То же, но без временного файла:
for ((i=0; i<$TAIL_FILE_SIZE; $i++)); do
( cat head; tail -c $i tail ) | gzip -t &>/dev/null && { echo "TEST OK: $i"; break; }
done
()
создать подоболочку. Его вывод подается на gzip -t
, и он будет читать из стандартного ввода, если это не терминал. Нет временных файлов - все данные находятся в конвейере.
В твоем случае я думаю tail -c
должно быть в порядке. Многие инструменты GNU (включая хвост) имеют довольно большую производительность, помогающую оптимизировать. Например. на моем SUSE в офисе tail -c
использовал mmap () для доступа к входному файлу.
В противном случае для чтения файла со смещением обычно используется dd
.
P.S. В Perl вы можете прочитать файлы head и tail в память, а затем с помощью substr () попробовать передать фрагменты в некоторую библиотеку gzip из CPAN. (Я почти уверен, что для Perl есть библиотеки gzip, но я не использовал их. Google показывает сразу несколько обращений.) Таким образом, вы могли бы уменьшить накладные расходы, убрав запуск процессов и перечитывание файлов.