Я загружал zip-файлы с Google Диска. Файлы содержат видео в формате mp4, и мне не хотелось ждать завершения загрузки. VLC может нормально воспроизводить неполные файлы, но тогда загруженные файлы являются zip-файлами, а не файлами mp4. wget
, вероятно, самый простой способ направить загрузку напрямую в фильтр, а затем я мог бы использовать funzip
и вывести его в файл, а затем воспроизвести его, как при потоковой передаче видео. Однако мне не удалось загрузить wget
с Google Диска, он просто продолжал возвращать ERROR 400
неверную ошибку запроса, то же самое произошло с curl
, поэтому мне пришлось рассчитаться с помощью Chromium. Таким образом, мне пришлось бы использовать неполный файл, а не загружать.
Есть ли какой-нибудь простой способ использовать файл, загружаемый в настоящее время, для передачи по конвейеру funzip
?
tail -n +0 -f /path/to/file | funzip ...
По сути, tail отслеживает изменения длины файла и продолжает передавать любые дополнительные байты. Однако он не может знать, когда загрузка завершена, поэтому в какой-то момент может потребоваться убить его, в зависимости от того, что вы делаете с потоком.
Мы, конечно, предполагаем, что браузер попытается загрузить файл линейно и не будет записывать какие-либо метаданные, чтобы указать, что файл загружен только частично (что позже он будет перезаписан фактическими байтами файла). На практике загрузчики в браузерах довольно консервативны, поэтому можно ожидать, что это сработает.