web-dev-qa-db-fra.com

Renommer des fichiers en double lors de l'utilisation de SCP (Secure Copy)

J'utilise scp pour déplacer les fichiers entre les serveurs de mon réseau comme suit ...

scp /folder/file user@<ip address>/User/Documents/Transfer

... Cependant, je ne veux pas écraser les fichiers en double. Est-il possible de renommer les fichiers dont le nom est déjà pris dans le dossier de destination?

Par exemple. Si fichier.txt existe déjà dans le dossier de destination, le nouveau file1.txt sera renommé en file1-1.txt et les versions suivantes seront file1-2.txt etc. De la même manière qu'un autre système d'exploitation offre une option conservez les deux fichiers.

Le format des noms de fichiers n’est pas strict, je ne veux tout simplement pas avoir à renommer manuellement les fichiers avant le transfert et je ne veux pas perdre de données importantes.

2
spcurtis81

Je crois que vous ne pourrez pas faire cela avec scp seul. Votre meilleur choix serait d'utiliser rsync sur ssh avec quelque chose comme les options supplémentaires suivantes:

--backup --suffix=_`date +"%m%d%Y_%H%M"` --backup-dir=DIR

Quelques sections pertinentes des pages de manuel relatives à rsync:

-b, --backup
   With this option, preexisting destination files are renamed as  each  file  is
   transferred  or  deleted.  You can control where the backup file goes and what
   (if any) suffix gets appended using the --backup-dir and --suffix options.

--suffix=SUFFIX
    This option allows you to override the default backup  suffix  used  with  the
    --backup  (-b) option. The default suffix is a ~ if no --backup-dir was speci-
    fied, otherwise it is an empty string.

--backup-dir=DIR
     In combination with the --backup option, this tells rsync to store all backups
     in the specified directory on the receiving side.  This can be used for incre-
     mental backups.  You can additionally specify a backup suffix using the --suf-
     fix option (otherwise the files backed up in the specified directory will keep
     their original filenames).

Cela devrait pouvoir être massé pour répondre à vos besoins. Ci-dessous un test de base, vous aurez sans doute d’autres options, y compris ssh, à ajouter:

rsync -av --backup --suffix=_`date +"%m%d%Y_%H%M"` --backup-dir=backup test1/ test2/

Donc, avec ceci en place:

  1. Un fichier est transféré de test1 à test2
  2. Si ce fichier existe déjà sur test2, mais que le fichier transféré est plus récent, le fichier 'distant' est mis à jour et, ce qui est important:
  3. Le fichier d'origine sur test2 est sauvegardé sur test2/backup avec un suffixe incrémentiel pour la date et l'heure.

Plutôt cool? Et je soupçonne exactement ce que vous recherchez. Notez que j'ai utilisé un chemin relatif pour le répertoire de sauvegarde, un chemin absol peut également être utilisé ...

3
andrew.46