Quand j'utilise
cp -R inputFolder outputFolder
le résultat dépend du contexte :
- s'il
outputFolder
n'existe pas, il sera créé et le chemin du dossier cloné seraoutputFolder
. - s'il
outputFolder
existe, le clone créé seraoutputFolder/inputFolder
C'est horrible , car je veux créer un script d'installation. Si l'utilisateur l'exécute deux fois par erreur, il l'aura outputFolder
créé la première fois. À la deuxième exécution, tous les éléments seront créés à nouveau outputFolder/inputFolder
.
- Je veux toujours le premier comportement: créer un clone à côté de l'original (en tant que frère ou soeur).
- Je veux utiliser
cp
pour être portable (par exemple, MINGW n'a pas étérsync
expédié) - J'ai vérifié
cp -R --parents
mais cela recrée le chemin jusqu'au bout de l'arborescence (donc le clone ne sera pasoutputFolder
maissome/path/outputFolder
) --remove-destination
ou si le--update
cas 2 ne change rien, les choses sont encore copiées dansoutputFolder/inputFolder
Est-il possible de le faire sans d'abord vérifier l'existence du outputFolder
(si le dossier n'existe pas alors ...) ou en utilisant rm -rf outputFolder
?
Quel est le moyen UNIX convenu et portable de faire cela?
rsync
?
cp
, la canalisation entre deux tar
commandes est un moyen fiable et agréable de copier des arbres.
rsync
expédié.
tar -C input -cf - . | tar -C output -xf -
marche. -C
modifie le répertoire de travail, mais ce n’est pas une option standard, donc s’il n’est pas pris en charge, vous devez commencer par exécuter les deux ( cd input && tar -cf - . ) | ( cd output && tar -xf - )
fichiers tar dans les répertoires de travail appropriés. Par exemple, si vous utilisez Windows, je n’utiliserai que la réponse de roaima.
mv
de déplacer une collection de fichiers dans un seul fichier ordinaire?