J'ai remarqué que chaque fois que j'utilise une commande, cp -R foo/*
je copie tout, sauf les fichiers tels que .env
ou probablement.gitignore
La solution consiste à utiliser cp -R foo/
car il gère l’ensemble du répertoire, mais cela ne change pas le fait que je ne comprends toujours pas le comportement de l’utilisation d’un *
caractère.
Pourquoi un *
personnage ne va pas attraper un fichier comme .env
?
Le système d'exploitation est Debian
*
, étant donné que les fichiers ne sont généralement pas cachésroot
.Outre les autres réponses que vous avez, il existe quelques autres cas où
foo/
et quifoo/*
pourraient être différents (pas seulement les fichiers commençant par.
). En outre, si vous souhaitez que les fichiers qui commencent par.
correspondre à votre glob, vous pouvez également l'activer avecshopt -s dotglob
.Le premier est le cas , il n'y a aucune entrée dans
foo/
et vous n'avez pas activénullglob
puisfoo/*
sera renvoyé comme un littéral passé àcp
. Puisque (dans ce cas), il n’ya pas de sourcefoo/*
cp
qui se plaindrait, alors qu’ilcp -R foo/
faudrait toujours au moinsfoo/
copier. Si vous activeznullglob
cette option, ellefoo/*
ne sera plus étendue à rien, de sorte que vous manquerez d'un argumentcp
.Un autre cas à considérer est s'il y a beaucoup d'entrées dans
foo/
. Le shell développe le glob, puis appelle le processus, mais si le glob se développe en trop d'arguments, vous obtiendrez une erreur. Aveccp -R foo/
vous n'avez que 2 arguments (bien que vous ayez probablement une cible ailleurs).la source