Lorsque vous copiez à l'aide de, cp -a source/* target/vous copiez la plupart des fichiers et répertoires de sourceà target. Plus précisément, les éléments exclus seront probablement des fichiers commençant par un point ( .) au niveau supérieur de source.
Considérez ces fichiers (ou répertoires) dans source
apple # will be copied
banana/ # will be copied, as will all its contents
.cherry # will not be copied
Lorsque vous copiez à l'aide de, cp -a source/. target/vous copiez l'intégralité du contenu de source, y compris les éléments commençant par un point ( .) verstarget
Considérez ces fichiers (ou répertoires) dans source
apple # will be copied
banana/ # will be copied, as will all its contents
.cherry # will be copied
Si vous utilisez bash, zshvous pouvez utiliser l' dotgloboption pour modifier la signification de *afin qu'il inclue les fichiers et les répertoires commençant par un point (a yashégalement une dotgloboption; cependant, il inclut ensuite .et ..dans les extensions globales ce qui limite son utilisation. Voir aussi FIGNORE='@(.|..)'dans ksh93).
Fait intéressant, il cp -a source/. target/est garanti de ne jamais créer le composant target/source. (D'un autre côté, cp -a source target/cela fera l'une des deux choses selon qu'il targetexiste déjà ou non . Voir Comment copier un dossier de manière récursive de manière idempotente en utilisant cp pour les détails.)
Lorsque vous supprimez avec, rm -rf source/*vous supprimez les fichiers et répertoires sourcequi ne commencent pas par un point ( .). Sous réserve du dotglobparamètre que j'ai déjà mentionné. Il ne supprimera pas le répertoire sourcelui-même.
Lorsque vous essayez de supprimer en utilisant rm -rf source/.il échouera - comme d' autres l'ont déjà expliqué - parce que POSIX interdit la suppression d'un chemin dont le dernier composant est .ou ... L'équivalent le plus proche est rm -rf source, qui supprimera le sourcerépertoire et tout son contenu, qu'ils commencent ou non par un point ( .).
It's up to the command whether that trailing dot makes any senseUm, le point est toujours lié au répertoire contenant lui-même,../foldersource/.il ne devrait donc pas être différent de l'indication./foldersource/et en fait c'est juste une manière redondante de déclarer la même chose. Aucune commande n'essaie de «donner un sens» au point ou au double point, car ceux-ci sont standard sur les systèmes de fichiers Linux / Unix.rmrejette simplement la suppression du répertoire de travail actuel commejimmijindiqué dans leur réponse. Notez également que vous utilisez./dans tous vos exemples pendant qu'OP../y est. Un peu (grande) différence.