Obtenir rsync pour déplacer le fichier de la source vers la destination?

15

Est-ce que rsync est un bon choix pour mon projet?

Je dois:
- copier des fichiers de la source vers le dossier de destination via SSH,
- être sûr que tous les fichiers sont copiés,
- supprimer les fichiers source après la copie.
- si j'ai un nom de conflit, je dois renommer des fichiers.

Il semble que je puisse utiliser l'option: --remove-source-files (pour supprimer les fichiers source)
Mais comment rsync gère-t-il les conflits, puis-je avoir des règles?

Cas d'utilisation sur mon projet:

J'exécute le calcul scientifique sur le serveur A et les résultats sont insérés dans le dossier "process", pour chaque calcul j'ai un dépôt comme celui-ci: / process / calc1.
Maintenant, je voudrais transférer le dépôt "/ calc1" sur le serveur B (j'obtiens / process / calc1), et supprimer "calc1" du serveur A.
... Lors d'un autre calcul, j'obtiens "/ process / calc2" sur le serveur A, l'idée est aussi de déplacer "calc2" dans le répertoire "/ process /" sur le serveur B, alors j'ai maintenant sur le serveur B:
- / process / calc1
- / process / calc2
(et / process / sur le serveur A est vide).

Comment rsync gérera les conflits (sur le serveur B) si j'ai un autre dossier comme "/ process / calc1" sur le serveur A après un nouveau calcul (si "/ process / calc1" existe déjà sur le serveur B)?

Est-il possible d'ajouter des règles avec rsync et de renommer "/ process / calc1" par "process / calc1R2" sur le serveur B? Et ainsi de suite (ex: calc1R3)?

Merci.

user44782
la source

Réponses:

11

Si vous voulez vraiment utiliser rsync, il semble que vous aurez besoin d'une combinaison de --backup, --backup-dir et --suffix. Le plus proche que je pense que vous pourriez obtenir est avec quelque chose comme ça

rsync -abv --suffix R1 --remove-source-files src/ dst/

Cela ferait près de ce que vous voulez, mais cela ne renommerait pas les fichiers exactement comme vous le souhaitez. L'option --suffix ajoute du texte à la fin d'un fichier existant, mais elle ne le fait que pour le premier conflit. Si vous l'exécutiez à nouveau, il écraserait simplement votre première sauvegarde. Vous devriez changer cette valeur de suffixe à chaque exécution de la commande, ce qui fonctionnerait si vous utilisiez quelque chose avec un horodatage, comme ceci:

rsync -abv --suffix `date +%Y%m%d%k%M%S` --remove-source-files src/ dst/

Je ne sais pas si c'est exagéré pour ce que vous recherchez, mais cela devrait répondre à vos besoins.

Paul Kroon
la source
Je peux avoir de gros fichiers après le calcul, il est donc probablement préférable d'utiliser rsync (en cas de problème de réseau).
user44782
1

Comme son nom l'indique, rsync est utilisé pour synchroniser les fichiers. Lorsque "synchronisé", cela signifie que les fichiers sur la source et la destination sont les mêmes. Cela ne semble pas être ce que vous voulez faire.

Il semble que vous souhaitiez simplement déplacer certains fichiers. Vous n'avez pas besoin d'utiliser rsync pour cela. Il semble que vous utilisiez un linux ou un BSD. Vous pouvez utiliser mv -n sur ssh. L'option -n ne remplace pas les fichiers existants. Ce n'est pas 100% automatique. Cependant, je ne vois pas comment le fichier pourrait déjà exister dans votre cas. Les fichiers seront copiés de la source vers la destination, puis supprimés de la source. Voulez-vous exécuter à nouveau les mêmes calculs? Est-ce pour cela que vous vous retrouverez avec des fichiers du même nom? Je suggère d'ajouter un numéro de série ou de lot au nom du dossier. Vous voudriez que ce soit clair de toute façon. Avez-vous un contrôle sur la façon dont le dossier est nommé? Plus de détails? Je recommanderais de mettre les commandes dans un script bash ou similaire.

d -_- b
la source
Dans certains cas, je dois refaire le même calcul (et c'est pourquoi je me retrouve avec des fichiers du même nom). Vous avez raison, ajouter une course est une bonne idée: dans trouver aussi la commande mmv -a (j'espère que ça marche en mode ssh, quelqu'un utilise déjà cette ligne de commande?). Je contrôle le nom du dossier.
user44782
Il n'est probablement pas installé sur la machine. Si c'est votre machine, vous pouvez l'installer cependant. Basé sur Debian: sudo apt-get install mmv Vous pouvez également rechercher dans sshfs ou NFS et faire sortir les fichiers directement vers la destination finale. Sauf nécessité d'un emplacement intermédiaire (inspection, modification, etc.). Si le lien entre les deux machines n'est pas fiable, c'est bien sûr une mauvaise idée. La suggestion de Paul est bonne. Cependant, ajouter le numéro de série au départ serait probablement plus organisé.
d -_- b
1
Comment utilisez-vous "mv -n" sur ssh? Vous pouvez utiliser mv sur sshfs.
guettli
Ops ... Oui, cela rend plus clair.
d -_- b
-1

Pour SSH, en résumé, utilisez ceci:

Accès via shell distant:

Tirez: rsync [OPTION ...] [USER @] HÔTE: SRC ... [DEST]

Push: rsync [OPTION ...] SRC ... [USER @] HÔTE: DEST

Tout est expliqué dans rsync (1).

Quant à l'écrire pour un cronjob, pour rsync sur ssh automatiquement sans exiger de mot de passe, regardez aussi ssh-agent (1).


la source