
我有一個包含大量文件的 zip 存檔和一個包含文件列表(約 10000 個項目)的純文字文件,我需要使用 bash 從該存檔中提取這些文件。
執行該操作的最佳方法是什麼?明顯的方法是對檔案的每一行運行 unzip,但它看起來非常慢。
答案1
unzip
您可以透過將純文字檔案作為輸入來運行整個文件列表,而不是在每個文件上運行:
unzip -j MyZipFile.zip <<<textfile
答案2
Unzip支援指定解壓縮哪些檔案:
unzip archive.zip file1.txt file2.txt file3.txt ...
但這不適用於 10000 個項目。您可以將檔案清單分成 100 個區塊,然後對它們運行解壓縮,這比單獨提取每個檔案的實現速度更快。
答案3
您可以使用 xargs 以及-a
從檔案中讀取其參數的選項。也可能使用一個標誌將參數數量限制為適當的數量,以確保在存在此類限制時 shell 不會處理太多參數。