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
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.
Je viens de trouver un simple bidouillage. Marquez les fichiers existants en lecture seule.
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 *.
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!
rsync sur ssh il faudra que ce soit.
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"