Использовать расширение кривой?
curl ftp://ftp.vim.org/pub/vim/patches/7.3/7.3.{548..1000}
GNU tar --append:
tar -f foo.tar --append newfiles
К сожалению, он читает полный файл tar.
.Нельзя допустить, чтобы несколько процессов добавили в один и тот же tar-архив (или любой другой обычный формат архива, сжатый или нет). Каждый файл хранится непрерывно, и нет возможности вставить данные в файл, только добавить или перезаписать, так что продолжение записи в файл, который не последний, перезапишет последующие файлы.
Если вы заранее знаете размер файла, вы можете зарезервировать его в tar-архиве и заставить программу продолжать запись. Для этого потребовалось бы много кодирования: это очень необычная вещь.
В Unix есть функция, предназначенная для размещения группы файлов, которые записываются самостоятельно. Это называется каталог.
Есть очень мало случаев, когда вы могли бы получить что-нибудь из несжатого архива через каталог. В некоторых случаях чтение может быть немного быстрее; это является внутренним следствием формата каталога (где каждый элемент файла является указателем на его содержимое) в отличие от формата архива (где каждый элемент файла является непосредственно его содержимым), что как раз и делает возможным построение каталога кусочками. Преобразование дерева каталога в архив является постобработкой, которая должна выполняться последовательно.
Можно начать создание финального файла tar
до того, как будут созданы все выходные файлы: Может быть, это даст вам нужную скорость.
Вы можете вызвать tar следующим образом:
tar -cf foo.tar -T file-list
файл-список
будет FIFO. Вам нужен скрипт, который обнаруживает
новых файлов в исходном каталоге (inotifywatch
)
когда каждый из этих новых файлов завершается (fuser
)
Если файл завершается, то его путь записывается в FIFO. Может быть полезно не создавать архив с полностью смешанными путями. Вы можете начать с директории, которая получит первый входной файл, и добавлять новые директории только после того, как закончится их последний файл (после завершения соответствующего процесса создайте флаг-флаг-файл). Преимущество первого подхода заключается в том, что, вероятно, файл еще полностью находится в кэше.