GNU/Linux >> Tutoriels Linux >  >> Linux

Pourquoi le caractère joker * est-il si différent entre les commandes Zip et Rm ?

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]


Linux
  1. Quelle est la différence entre InnoDB et MyISAM ?

  2. Quelle est la différence entre Sudo Su - et Sudo Su - ?

  3. La Différence Entre Nss Et Pam?

  4. Unzip pense que le fichier Zip est une bombe Zip ?

  5. Quelle est la différence entre ls et l ?

Quelle est la différence entre Linux et Unix ?

La différence entre plus, moins et la plupart des commandes

Expliqué! La différence entre les commandes grep, egrep et fgrep

Quelle est la différence entre les commandes kill et killall ?

Commandes Zip et Unzip sous Linux/Unix

Qu'est-ce qui est le plus efficace - la compression tar ou zip ? Quelle est la différence entre tar et zip ?