Ho messo insieme uno script per eseguire alcune operazioni sui file per me. Sto utilizzando l'operatore jolly *
per applicare funzioni a tutti i file di un tipo, ma c'è una cosa che non ottengo. Posso unzip
tutti i file in una cartella come questa
unzip "*".zip
Tuttavia, per rimuovere tutti i file zip in seguito, devo farlo
rm *.zip
Cioè, non vuole le virgolette. L'unzip, d'altra parte, non funziona se gli do solo il * (mi avvisa che "i file non sono stati abbinati").
Perché è diverso? A me sembra la stessa identica operazione. O sto usando il carattere jolly in modo errato?
Le introduzioni al jolly in Unix non entrano in questo aspetto e non sono riuscito a individuare nulla nel rm
o zip
documenti.
Sto usando il terminale su un Mac (Yosemite).
Risposta accettata:
Hai spiegato molto bene la situazione. L'ultimo pezzo del puzzle è che unzip
può gestire i caratteri jolly da solo:
http://www.info-zip.org/mans/unzip.html
ARGOMENTI
file[.zip]
…
Le espressioni jolly sono simili a quelle supportate nelle shell Unix comunemente usate (sh, ksh, csh) e possono contenere:
* corrisponde a una sequenza di 0 o più caratteri
Citando il carattere jolly *, hai impedito alla tua shell di espanderla, in modo che unzip
vede il carattere jolly e si occupa di espanderlo secondo la propria logica.
rm
, al contrario, non supporta i caratteri jolly da soli , quindi il tentativo di citare un carattere jolly indicherà rm
per cercare invece un asterisco letterale nel nome del file.
Il motivo per cui unzip *.zip
non funziona è che unzip
La sintassi di 's semplicemente non consente più file zip; se sono presenti più parametri, si aspetta che il 2° e quelli successivi siano file nell'archivio:
unzip [-Z] [-cflptTuvz[abjnoqsCDKLMUVWX$/:^]] file[.zip] [file(s) …] [-x xfile(s) …] [-d exdir]