61 votes

Copier des fichiers sous Linux, éviter la copie si les fichiers existent dans la destination

Je dois copier un dossier /home/user d'un disque dur à un autre. Il contient 100 000 fichiers et pèse environ 10 Go.

J'utilise

cp -r /origin /destination

Je reçois parfois des erreurs dues à des liens brisés, des autorisations, etc. Je corrige alors l'erreur, et je dois recommencer la copie.

Je me demande comment je pourrais dire à la commande "cp", une fois qu'elle essaie de copier à nouveau, de ne pas copier à nouveau les fichiers s'ils existent dans le dossier de destination.

2voto

grepit Points 183

Toutes les réponses ci-dessus sont correctes mais si vous faites cela de manière récursive alors

vous devez faire :

 cp -rn SOURCE_PATH DESTINATION_PATH

2voto

Chad Points 131

Utilisez cp -rn <sourcedirname>/. <destdirname>

Le commutateur r rend la copie récursive sur les répertoires.

Le commutateur n (version longue no-clobber) garantit que les fichiers existants ne sont jamais écrasés.

Le /. après le nom de répertoire source assure qu'il ne devient pas un sous-répertoire sous le nom de répertoire destination au lieu que tout le contenu du premier soit copié dans le second.

1voto

Incident Points 169

Vous devez copier en tant que root pour maintenir les permissions/propriété.

# cp -au

Regardez aussi rsync

0voto

joe Points 101

Si votre emplacement source est un système de fichiers distant, et que vous n'avez pas Shell accès à celui-ci (et donc ne peut pas utiliser rsync ), ceci pourrait vous aider :

cd /local/destination/path
echo "reget /remote/source/path" | sftp -r sftp://username@domainOrIpAddress

Von ce réponse.

Notez que reget est la même chose que get -a . Il vérifie la présence de fichiers à moitié copiés et termine de les copier.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X