Чтобы избежать создания временных файлов или влияния на права доступа, владельца или другие атрибуты файлов, с помощью ksh93
:
for f in file{2}([0-9]); do
tail -n +11 < "$f" 1<>; "$f"
done
Оператор перенаправления <>;
действует как <>
(открыть в режиме чтения + записи), за исключением того, что оболочка обрезает файл после успешного завершения команды в том месте, где команда оставила его.
Итак, мы фактически перезаписываем файл поверх самого себя.
Поскольку pv
- это просто инструмент мониторинга, я предполагаю, что это однопоточная программа, использующая синхронный ввод-вывод. Учитывая, что вход и выход работают с разной скоростью, она будет заполнять и опустошать свой буфер, чтобы предотвратить дросселирование, но если один из каналов полностью заглохнет (в вашем случае это split
, не принимающий вход), второй экземпляр pv
точно так же заглохнет на вызове write
. Затем gzip
попытается вывести больше данных, переполнит буфер трубы и тоже заглохнет, и так далее, пока не заглохнет весь конвейер.
Попробуйте использовать buffer
вместо pv
и посмотрите, поможет ли это. buffer
порождает два процесса (один для ввода и один для вывода), и должен поддерживать работу конвейера, даже если вывод полностью остановлен.