2013-01-04 93 views

回答

4

這應該工作:

unzip -q /path/to/zipfile $(cat thetxtfile) 

當然,這個命令需要在目錄中是最好空開始發行。

需要注意的是,如果有空間到您的文件名,這是不行的,你需要做的這個代替:

while read thefile; do unzip -q /path/to/zipfile "$thefile"; done <thetxtfile 
+0

這將取決於文件的命名方式。例如,空間會有問題。如果文件太多,並且超出平臺的參數數量限制,它也會失敗。 –

+0

是的,沒錯。這是一個「快速解決」。使用完整的解決方案進行編輯... – fge

2

如果你使用在命令行中的文件列表的工作, xargs幾乎總是最好的答案 - 它用乾淨的空格處理文件名,並且它繞過了參數數量的限制。我建議這樣的:

tr '\n' '\0' <filelist.txt | xargs -0 unzip -q /path/to/zipfile 

採用tr '\n' '\0' <filelist.txt需要您的文件和替代新線NULL字符的列表。 xargs -0會讀取一個nul分隔的文件列表,並將其粘貼到以下命令的agument列表中。

如果您的文件名列表使用'\ r \ n'或'\ r'風格的行尾,這將會中斷。

+1

'xargs -d'\ n''相當於'tr'和'xargs -0'的組合。還值得注意的是,根據xargs手冊頁,「Unix文件名可以包含空格和換行符」,所以我猜想在所有情況下都不可能解決這個問題,因爲輸入是不明確的。 –

+0

好點。理論上,我猜想可以使用nul字符(或者文件名中沒有使用某個分隔符)編輯文本文件,然後可以使用-0或-d 參數將其直接傳送到xargs。在實踐中,我發現最好簡單地接受任何人將新行寫入文件名並公開執行,作爲對其他人的警告。 –