Command-Line
解壓縮源參數
要將一堆 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
。不同之處在於兩個命令對參數的解釋不同。