
У меня есть zip-архив с большим количеством файлов и текстовый файл со списком файлов (~10000 элементов), который мне нужно извлечь из этого архива с помощью bash.
Как лучше всего выполнить эту операцию? Очевидный способ — запустить unzip для каждой строки файла, но это выглядит очень медленно.
решение1
Вместо того чтобы запускать программу unzip
для каждого файла, вы можете запустить программу для всего списка файлов, указав в качестве входных данных файл с открытым текстом:
unzip -j MyZipFile.zip <<<textfile
решение2
Unzip позволяет указать, какие файлы следует извлечь:
unzip archive.zip file1.txt file2.txt file3.txt ...
Но это не сработает для 10000 элементов. Вы можете разбить список файлов на части по 100 и запустить unzip с ними, это будет более быстрой реализацией, чем извлечение каждого файла для себя.
решение3
Вы можете использовать xargs с -a
опцией чтения его аргументов из файла. Вероятно, также используйте флаг, чтобы ограничить количество аргументов соответствующим количеством, чтобы гарантировать, что их не будет слишком много для обработки оболочкой, если есть такое ограничение.