Quelle est la signification du point dans les commandes bash et en quoi est-il différent d'un astérisque?

11

J'essaie de comprendre la signification du point dans bash et comment il diffère d'un astérisque. Quelqu'un peut-il élaborer? Par exemple, quelle est la différence entre cp -ar /foo/. /foo2/etcp -pr /foo/* /foo2/

Mike B
la source

Réponses:

12

Le point ( .) est juste le .répertoire à l'intérieur d'un répertoire qui est le même que le répertoire lui-même (vous ls -la /foole montrera). Donc, si vous copiez foo/.ailleurs, vous copiez efficacement tout l'arborescence ci-dessous foosans se copier foo(vous le copiez dans foo2/.lequel est le même que foo2).

/foo/*est étendu par le shell à la liste des fichiers et répertoires non cachés dans /foo, de sorte qu'il copiera également la même structure de répertoires /foodans /foo2, à l'exception des dotfiles / dotdirs. En effet, cprecevra (potentiellement) de nombreux arguments. Si la liste est trop grande, cela peut même entraîner l' cpéchec de l'exécution de .

Stéphane Chazelas
la source
Désolé mais je commence à être confus. Donc, par nature, l'astérisque rend la commande récursive? En d'autres termes, cp -r /foo/*la même chose que cp /foo/* ?
Mike B
5
@MikeB, non, le shell étend uniquement la liste des fichiers dans le répertoire / foo. Cela ne modifie pas le comportement de cp. Utilisez set -xou echo cp -pr /foo/* /foo2pour voir ce qui se passe. Il est important de réaliser que c'est le shell qui étend les caractères génériques. cpne voit pas l'étoile.
Stéphane Chazelas
Et ça? chmod 755 -R. contre chmod 755 -R *
wayofthefuture