Command-Line

解壓縮源參數

  • December 14, 2014

要將一堆 zip 文件從一個位置複製到另一個位置:

$ cp *.zip destination/

要將一堆 zip 文件解壓縮到一個目錄:

$ unzip \*.zip -d destination/

man unzip說:

僅當 shell 擴展萬用字元時才需要星號前的反斜杠,如在 Unix 中

讓我感到困惑的是,這兩個命令的行為方式似乎不同。他們為什麼不呢?有沒有辦法知道或猜測每個命令的行為方式,而不是每次都記住或閱讀手冊頁?

是不是因為cp實現了幾個源參數而unzip不同?unzip可以帶萬用字元的字元串,為什麼不實現幾個源文件呢?

獲取源參數的標準方法是什麼?是不是cp真的做的太多了?

如果您有兩個 zip 文件a.zip並且b.zip在目前目錄中,則

$ cp *.zip destination/

擴展到

$ cp a.zip b.zip destination/

for 的語義cp是同時複製a.zip和復製b.zip到目的地。

如果你輸入

$ cp \*.zip destination/

它只是“擴展”到

$ cp '*.zip' destination/

即,它將嘗試將名為“*.zip”的單個文件複製到目標,這不是您想要的。

另一方面,如果您鍵入

$ unzip *.zip -d destination/

它將再次擴展到

$ unzip a.zip b.zip -d destination/

的語義unzip是在存檔“a.zip”中找到一個名為“b.zip”的文件,這又不是您想要的。

如果你輸入

$ unzip \*.zip -d destination/

unzip命令不會簡單地嘗試解壓縮呼叫的文件*.zip,而是會解壓縮所有以 . 結尾的文件.zip

不同之處在於兩個命令對參數的解釋不同。

引用自:https://unix.stackexchange.com/questions/174085