Quando copi usando cp -a source/* target/stai copiando la maggior parte dei file e delle directory da sourcea target. In particolare, gli elementi esclusi saranno probabilmente file che iniziano con un punto ( .) nel livello superiore di source.
Considera questi file (o directory) in source
apple # will be copied
banana/ # will be copied, as will all its contents
.cherry # will not be copied
Quando copi usando cp -a source/. target/stai copiando l'intero contenuto di source, compresi tutti gli elementi che iniziano con un punto ( .) intarget
Considera questi file (o directory) in source
apple # will be copied
banana/ # will be copied, as will all its contents
.cherry # will be copied
Se stai usando bash, zshpuoi usare l' dotglobopzione per cambiare il significato in *modo che includa file e directory che iniziano con un punto ( yashha anche dotglobun'opzione; tuttavia, include quindi .e ..in espansioni glob che ne limitano l'usabilità. Vedi anche FIGNORE='@(.|..)'in ksh93).
È interessante notare che cp -a source/. target/è garantito che non crei mai il componente target/source. (D'altra parte, cp -a source target/farà una delle due cose a seconda che esista o meno targetgià. Vedi Come copiare ricorsivamente una cartella in modo idempotente usando cp per i dettagli.)
Quando elimini usando rm -rf source/*stai cancellando i file e le directory all'interno sourceche non iniziano con un punto ( .). Fatta salva l' dotglobimpostazione che ho già menzionato. Non eliminerà la directory sourcestessa.
Quando si tenta di eliminare utilizzando rm -rf source/., l'operazione fallirà, come altri hanno già spiegato , perché POSIX proibisce l'eliminazione di un percorso il cui ultimo componente è .o ... L'equivalente più vicino è rm -rf source, che eliminerà la sourcedirectory e tutto il suo contenuto indipendentemente dal fatto che inizino o meno con un punto ( .).
It's up to the command whether that trailing dot makes any senseEhm, il punto si collega sempre alla stessa directory contenente, quindi../foldersource/.non dovrebbe essere diverso dall'affermare./foldersource/e in effetti è solo un modo ridondante per affermare la stessa cosa. Nessun comando tenta di "dare un senso" al punto o al doppio punto, poiché questi sono standard sui filesystem Linux / Unix.rmrifiuta semplicemente la rimozione della directory di lavoro corrente comejimmijindicato nella loro risposta. Inoltre, tieni presente che stai utilizzando./tutti i tuoi esempi mentre OP è../presente. Un po 'una (grande) differenza.