Shell

為什麼 zip 和 rm 命令之間的萬用字元 * 如此不同?

  • May 31, 2021

我整理了一個腳本來為我做一些文件操作。我正在使用萬用字元運算符*將函式應用於一種類型的所有文件,但有一件事我沒有得到。我可以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 $$

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