human
Je suis en train d'écrire un script Bash qui va écraser un répertoire existant. J'ai un répertoire ```foo/``` et j'essaie de le remplacer par ```bar/```. Mais quand je fais cela:
```cp -Rf foo/ bar/
```
un nouveau répertoire ```bar/foo/``` est créé. Je ne veux pas ça. Il y a deux fichiers dans ```foo/```; ```a``` et ```b```. Il y a aussi des fichiers avec les mêmes noms dans ```bar/```. Je veux que ```foo/a``` et ```foo/b``` remplacent ```bar/a``` et ```bar/b```
gpt
Si vous voulez vous assurer que ```bar/``` soit identique à ```foo/```, utilisez plutôt ```rsync```:
```rsync -a --delete foo/ bar/
```
Si seulement quelques choses ont changé, cela s'exécutera beaucoup plus rapidement que de supprimer et de recopier tout le répertoire.

* ```-a``` est le mode 'archive', qui copie fidèlement les fichiers de ```foo/``` vers ```bar/```
* ```--delete``` supprime également les fichiers supplémentaires qui ne se trouvent pas dans ```foo/``` de ```bar/```, garantissant que ```bar/``` soit identique
* Si vous voulez voir ce qu'il fait, ajoutez ```-vh``` pour une sortie verbeuse et lisible par l'homme
* Remarque: le slash après ```foo``` est requis, sinon ```rsync``` copiera ```foo/``` vers ```bar/foo/``` au lieu de remplacer ```bar/``` lui-même.

* (Les slashes après les répertoires dans rsync sont déroutants; si cela vous intéresse, voici l'explication. Ils indiquent à rsync de se référer au contenu du répertoire, plutôt qu'au répertoire lui-même. Ainsi, pour écraser le contenu de ```foo/``` sur le contenu de ```bar/```, nous utilisons un slash sur les deux. C'est déroutant car cela ne fonctionnera pas comme prévu sans slash sur aucun des deux; rsync interprète sournoisement toujours le chemin de destination comme s'il avait un slash, même s'il respecte l'absence de slash sur le chemin source. Nous avons donc besoin d'un slash sur le chemin source pour qu'il corresponde au slash ajouté automatiquement sur le chemin de destination, si nous voulons copier le contenu de ```foo/``` dans ```bar/```, plutôt que le répertoire ```foo/``` lui-même atterrissant dans ```bar/``` en tant que ```bar/foo```.)

```rsync``` est très puissant et utile, si vous êtes curieux, cherchez ce qu'il peut faire d'autre (comme la copie via ssh).