pour copier le contenu d'un dossier que j'ai lu, l'utilisation est la suivante:
cp -rfva ../foldersource/. ./
mais ça marche aussi
cp -rfva ../foldersource/* ./
y a-t-il une différence?
par exemple si je veux supprimer un contenu d'un dossier avec. :
rm -rf ../foldersource/.
je reçois l'erreur:
rm: rejet delete folder '.' or '..':
mais avec un astérisque c'est ok
rm -rf ../foldersource/*
donc, l'astérisque est de meilleures options qui fonctionnent n'importe où?
It's up to the command whether that trailing dot makes any sense
Um, 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.rm
rejette simplement la suppression du répertoire de travail actuel commejimmij
indiqué dans leur réponse. Notez également que vous utilisez./
dans tous vos exemples pendant qu'OP../
y est. Un peu (grande) différence.cp -rfva ../foldersource/. ./
n'est PAS équivalent àcp -rfva ../foldersource ./
. Le suivi/.
est important.
est une convention standard sous Unix pour désigner le courant directement. Aussi, merci d'avoir souligné que j'avais utilisé./
dans mes exemples quand j'aurais dû utiliser../
; Je vais arranger ça. Vous avez tort de savoir si les commandes «donnent un sens» au point de fin; comme le fait remarquer l'OP (et je l'ai expérimentécp
) à la foisrm
etcp
se comportent différemment quand une fuite.
est présente. J'aurais dû écrire quelque chose comme "c'est à la commande si le point de fin a une sémantique spéciale ou unique". Je vais changer ma réponse pour plus de clarté.Lorsque vous copiez à l'aide de,
cp -a source/* target/
vous copiez la plupart des fichiers et répertoires desource
àtarget
. Plus précisément, les éléments exclus seront probablement des fichiers commençant par un point (.
) au niveau supérieur desource
.Considérez ces fichiers (ou répertoires) dans
source
Lorsque vous copiez à l'aide de,
cp -a source/. target/
vous copiez l'intégralité du contenu desource
, y compris les éléments commençant par un point (.
) verstarget
Considérez ces fichiers (ou répertoires) dans
source
Si vous utilisez
bash
,zsh
vous pouvez utiliser l'dotglob
option pour modifier la signification de*
afin qu'il inclue les fichiers et les répertoires commençant par un point (ayash
également unedotglob
option; cependant, il inclut ensuite.
et..
dans les extensions globales ce qui limite son utilisation. Voir aussiFIGNORE='@(.|..)'
dansksh93
).Fait intéressant, il
cp -a source/. target/
est garanti de ne jamais créer le composanttarget/source
. (D'un autre côté,cp -a source target/
cela fera l'une des deux choses selon qu'iltarget
existe 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épertoiressource
qui ne commencent pas par un point (.
). Sous réserve dudotglob
paramètre que j'ai déjà mentionné. Il ne supprimera pas le répertoiresource
lui-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 estrm -rf source
, qui supprimera lesource
répertoire et tout son contenu, qu'ils commencent ou non par un point (.
).la source
rm -rf .
échouer .Vous ne pouvez pas le faire
rm -rf ../foldersource/.
carrm
cela ne le permet pas, comme indiqué explicitement dans le manuel:et dans le manuel POSIX,
man 1p rm
nous voyons:la source