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]