J'ai créé un script pour effectuer certaines opérations sur les fichiers à ma place. J'utilise l'opérateur générique * pour appliquer des fonctions à tous les fichiers d'un type, mais il y a une chose que je ne comprends pas. Je peux unzip tous les fichiers dans un dossier comme celui-ci
unzip "*".zip
Cependant, pour supprimer tous les fichiers zip par la suite, je dois faire
rm *.zip
Autrement dit, il ne veut pas les guillemets. La décompression, en revanche, ne fonctionne pas si je lui donne juste le * (me donne un avertissement que "les fichiers n'ont pas été mis en correspondance").
Pourquoi est-ce différent ? Pour moi, cela ressemble exactement à la même opération. Ou est-ce que j'utilise le caractère générique de manière incorrecte ?
Les introductions au joker dans Unix n'abordent pas vraiment cela, et je n'ai rien pu trouver dans le rm ou zip docs.
J'utilise le terminal sur un Mac (Yosemite).
Réponse acceptée :
Vous avez très bien expliqué la situation. La dernière pièce du puzzle est que unzip peut gérer lui-même les caractères génériques :
http://www.info-zip.org/mans/unzip.html
ARGUMENTS
fichier[.zip]
…
Les expressions génériques sont similaires à celles prises en charge dans les shells Unix couramment utilisés (sh, ksh, csh) et peuvent contenir :
* correspond à une séquence de 0 caractères ou plus
En citant le caractère générique *, vous avez empêché votre shell de l'étendre, de sorte que unzip voit le caractère générique et s'occupe de l'étendre selon sa propre logique.
rm , en revanche, ne prend pas en charge les caractères génériques seuls , donc tenter de citer un caractère générique indiquera rm pour rechercher un astérisque littéral dans le nom de fichier à la place.
La raison pour laquelle unzip *.zip ne fonctionne pas, c'est que unzip La syntaxe de n'autorise tout simplement pas plusieurs fichiers zip ; s'il y a plusieurs paramètres, il s'attend à ce que le 2ème et les suivants soient des fichiers dans l'archive :
décompressez [-Z] [-cflptTuvz[abjnoqsCDKLMUVWX$/:^]] fichier[.zip] [fichier(s) …] [-x xfichier(s) …] [-d exdir]