嗨,我必須解壓縮一個文件,可能有一個目錄,我想排除該目錄中的所有內容,我嘗試了很多選項,並且看起來也是這樣,但似乎沒有找到任何好的解決方案。linux unzip排除文件夾中和下面的所有內容
這些都是zip文件的內容: 請注意排除文件夾是未知的深度,但我們必須排除一切
$unzip -l patch2.zip
Archive: patch2.zip
Length Date Time Name
--------- ---------- ----- ----
0 2013-10-29 17:42 EXCLUDE/
0 2013-10-29 17:24 EXCLUDE/inner/
0 2013-10-29 17:24 EXCLUDE/inner/inner1.txt
0 2013-10-29 15:45 EXCLUDE/file.txt
0 2013-10-29 15:44 patch.jar
0 2013-10-29 15:44 system.properties
--------- -------
0 6 files
我試過這個命令,只在它解壓縮文件,但不是文件夾及其內容:
$unzip -l patch2.zip -x EXCLUDE/*
Archive: patch2.zip
Length Date Time Name
--------- ---------- ----- ----
0 2013-10-29 17:42 EXCLUDE/
0 2013-10-29 17:24 EXCLUDE/inner/
0 2013-10-29 17:24 EXCLUDE/inner/inner1.txt
0 2013-10-29 15:44 patch.jar
0 2013-10-29 15:44 system.properties
--------- -------
0 5 files
感謝您的幫助。
+1爲答案,因爲它接近OP的問題。我自己的只是一個「很好的瞭解」替代方案^^(現在這個名字已經很少了,而在早期的linux時代,它更爲出名) –
謝謝你的完美工作。你能否解釋一下你的意思是「它傳遞給unzip,否則它會在被傳遞給unzip之前被shell擴展」。 – Ravi
@Ravi閱讀關於[Globbing](http://tldp.org/LDP/abs/html/globbingref.html),這是shell將通配符模式轉換爲文件名時的情況。例如,當你運行'echo *'時,shell會將'*'擴展爲一個文件名列表,例如'file1','file2'等之後執行echo。結果,'echo *'變成'echo file1 file2'。 'echo'程序從不會看到通配符,它只能看到參數'file1'和'file2'。但是,如果引用模式「echo」*「',那麼shell將不執行此擴展,並且該模式將作爲參數傳遞給可以解釋它的程序,但它會選擇它。 – dogbane