56 votes

Comment puis-je faire en sorte que la commande scp écrase le dossier de destination

Je suis en train d'utiliser la commande scp pour copier certains fichiers vers un pc distant, comme vous le faites avec scp :)

Je remarque que le comportement par défaut d'une copie scp de fichiers est de remplacer les fichiers existants. Maintenant, je veux copier un dossier donc je fais essentiellement la même chose :

scp -r  user@myOtherPc:

Où les parties entre <> sont mes chemins de dossiers. Cependant, lorsque j'exécute cela, je reçois le message "file exists". Y a-t-il un moyen de contourner cela ? une sorte d'écraser force ?

Merci, Fodder

45voto

nicolasochem Points 551

Comme mentionné précédemment, scp écrase joyeusement tout fichier déjà présent.

Le problème "fichier existant" ne peut survenir que lorsque vous avez un autre processus (comme un processus scp concurrent, ou autre chose) écrivant des dossiers et des fichiers vers la même destination. Envisagez d'utiliser rsync à la place.

7voto

EvR2f Points 171

Vous recevrez ce message d'erreur si le répertoire de destination contient déjà un fichier portant le même nom que le répertoire source que vous tentez de transférer. Vous ne pouvez pas avoir un fichier portant le même nom qu'un répertoire dans le même répertoire.

6voto

Ben Points 1519

Comme Levans, je n'ai pas pu reproduire cela, mais avez-vous envisagé d'utiliser rsync via ssh à la place? Si vous copiez un grand nombre de fichiers, rsync peut être une meilleure option que scp. Il existe plusieurs bons guides en ligne à ce sujet, tels que ceux-ci:

http://troy.jdmz.net/rsync/index.html https://calomel.org/rsync_tips.html

Le premier lien traite des sauvegardes automatiques via cron, donc certaines instructions (comme la création d'une clé ssh sans mot de passe) peuvent ne pas être pertinentes pour vous.

0voto

Yordan Georgiev Points 153

Ce command rsync le fera:

    export ssh_server=csitea.net # le nom de domaine ou l'ip si vous voulez
    export ssh_user=ubuntu # l'utilisateur ssh à utiliser
    export src_dir=/home/ubuntu/opt/ # le répertoire source
    # le chemin complet du fichier d'identité ssh
    export ssh_idty=~/.ssh/id_rsa.aws-ec2.csitea.net 
    export tgt_dir=/home/me/opt/ # le répertoire cible
    # Action !!!
    rsync -e "ssh -l USERID -i $ssh_idty" -av -r --partial --progress --human-readable \
        --stats $ssh_user@$ssh_server:$src_dir $tgt_dir
    # et vérifiez le résultat
    clear ; find $tgt_dir -type d -maxdepth 1|sort -nr| less

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