Shell
為什麼 zip 和 rm 命令之間的萬用字元 * 如此不同?
我整理了一個腳本來為我做一些文件操作。我正在使用萬用字元運算符
*
將函式應用於一種類型的所有文件,但有一件事我沒有得到。我可以unzip
像這樣的文件夾中的所有文件unzip "*".zip
但是,之後要刪除所有 zip 文件,我需要這樣做
rm *.zip
也就是說,它不需要引號。另一方面,如果我只是給它一個 *,則解壓縮不起作用(給我一個“文件不匹配”的警告)。
為什麼這不一樣?對我來說,這似乎是完全相同的操作。還是我錯誤地使用了萬用字元?
Unix中萬用字元的介紹
rm
並沒有真正涉及到這一點,我在orzip
文件中找不到任何內容。我在 Mac (Yosemite) 上使用終端。
你已經很好地解釋了情況。難題的最後一塊是
unzip
可以自己處理萬用字元:http://www.info-zip.org/mans/unzip.html
論據
文件
$$ .zip $$ …
萬用字元表達式類似於常用的 Unix shell(sh、ksh、csh)中支持的表達式,可能包含:
- 匹配 0 個或多個字元的序列
通過引用 * 萬用字元,您可以阻止 shell 擴展它,以便
unzip
看到萬用字元並根據自己的邏輯處理擴展它。
rm
相比之下,它本身不支持萬用字元*,*因此嘗試引用萬用字元將指示rm
在文件名中查找文字星號。
unzip *.zip
不起作用的原因是unzip
’s 語法根本不允許多個 zip 文件;如果有多個參數,它期望第二個和後續的參數是存檔中的文件:解壓
$$ -Z $$ $$ -cflptTuvz[abjnoqsCDKLMUVWX$/:^ $$] 文件$$ .zip $$ $$ file(s) … $$ $$ -x xfile(s) … $$ $$ -d exdir $$