Лучший способ извлечь множество файлов из zip-архива в bash

Лучший способ извлечь множество файлов из zip-архива в bash

У меня есть 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опцией чтения его аргументов из файла. Вероятно, также используйте флаг, чтобы ограничить количество аргументов соответствующим количеством, чтобы гарантировать, что их не будет слишком много для обработки оболочкой, если есть такое ограничение.

Связанный контент