Dal jsem dohromady skript, který za mě provedl nějaké operace se soubory. Používám zástupný operátor *
použít funkce na všechny soubory určitého typu, ale jednu věc nechápu. Mohu unzip
všechny soubory ve složce, jako je tato
unzip "*".zip
Chcete-li však později odstranit všechny soubory zip, musím to udělat
rm *.zip
To znamená, že nechce uvozovky. Na druhou stranu rozbalení nefunguje, pokud mu dám pouze * (upozorňuje mě, že „soubory nebyly shodovány“).
proč je to jiné? Mně to připadá jako úplně stejná operace. Nebo používám zástupný znak nesprávně?
Úvody do divokých karet v Unixu do toho ve skutečnosti nezapadají a v rm
jsem nemohl nic najít nebo zip
docs.
Používám terminál na Macu (Yosemite).
Přijatá odpověď:
Velmi dobře jste popsal situaci. Posledním kouskem skládačky je unzip
dokáže sám zpracovat zástupné znaky:
http://www.info-zip.org/mans/unzip.html
ARGUMENTY
soubor[.zip]
…
Výrazy se zástupnými znaky jsou podobné těm, které jsou podporovány v běžně používaných unixových shellech (sh, ksh, csh) a mohou obsahovat:
* odpovídá sekvenci 0 nebo více znaků
Uvedením zástupného znaku * jste zabránili svému shellu v jeho rozbalení, takže unzip
vidí zástupný znak a zabývá se jeho rozšířením podle své vlastní logiky.
rm
, naproti tomu samotné zástupné znaky nepodporuje , takže pokus o citaci zástupného znaku bude instruovat rm
místo toho hledat doslovnou hvězdičku v názvu souboru.
Důvod, proč unzip *.zip
nefunguje, je to unzip
Syntaxe jednoduše neumožňuje více souborů zip; pokud existuje více parametrů, očekává, že druhý a následující budou soubory v archivu:
rozbalte [-Z] [-cflptTuvz[abjnoqsCDKLMUVWX$/:^]] soubor[.zip] [soubor(y) …] [-x xsoubor(y) …] [-d exdir]