web-dev-qa-db-fra.com

Empêcher l'écrasement des fichiers lors de l'utilisation Scp

Je copiais certains fichiers en utilisant scp et je ne veux pas écraser les fichiers déjà présents.

Si j'utilisais la commande cp, je pense que cela peut être fait avec cp -n.

Existe-t-il une option similaire pour scp? J'ai parcouru la documentation de SCP et il semble n'y en avoir aucune.

Est-ce que rsync ou sftp est la solution pour résoudre ce problème?

Information additionnelle: 

OS: Ubuntu 12.04

36
Desert Ice

rsync semble être la solution à votre problème. Voici un exemple que j'ai tiré de ici :

rsync -avz foo:src/bar /data/tmp

L'option -a préservera les autorisations, la structure de répertoires, la propriété et les liens symboliques. Vous pouvez également spécifier chacune de ces options individuellement.

-v et -z signifient verbose et compressent respectivement. Vous n’avez pas vraiment besoin d’eux bien que -z soit bien si vous copiez de gros fichiers.

35
osulehria

Je viens de trouver un simple bidouillage. Marquez les fichiers existants en lecture seule.

15
Bruno
rsync -avz --ignore-existing /source folder/* user@remoteserver:/dstfolder/

--ignore-existing ne remplacera pas les fichiers sur le serveur distant ou le serveur de destination *.

9
Asif Khan

J'ai déjà utilisé rsync pour cela, mais je me suis retrouvé à essayer de récupérer une copie de Windows avec CopSSH et aucun rsync :-( La procédure suivante a parfaitement fonctionné pour moi, en utilisant des tests de fichiers pour éliminer les fichiers qui seraient écrasés générer plusieurs demandes 'get' à une instance de sftp.

(  echo  'cd work/ftp/' ; 
   ssh <user>@<machine> 'cd work/ftp/ && ls -1 ITEM_SALE_SUMMARY_V.*.dat.xz' |
   while read line; do [[ -f "$line" ]] || echo get "$line"; done 
) | sftp  <user>@<machine>

Juste au cas où d'autres auraient besoin d'une solution non-rsync!

0
dsz

rsync sur ssh il faudra que ce soit.

0
vladr

Juste pour compléter les autres solutions:

Pour un fichier ascii/bin, vous pouvez le faire avec:

cat source_file | ssh Host "test ! -f target_file && cat > target_file"

0
SkyRaT