Far rsync spostare il file dall'origine alla destinazione?


15

Rsync è una buona scelta per il mio progetto?

Devo:
- copiare i file dalla cartella di origine a quella di destinazione tramite SSH,
- assicurarsi che tutti i file siano copiati,
- eliminare i file di origine dopo la copia.
- se ho un nome di conflitto, devo rinominare i file.

Sembra che posso usare l'opzione: --remove-source-files (per eliminare i file sorgente)
Ma come posso gestire i conflitti con rsync?

Caso d'uso sul mio progetto:

Eseguo calcoli scientifici sul server A e i risultati vengono inseriti nella cartella "process", per ogni calcolo ho un repository come questo: / process / calc1.
Ora vorrei trasferire il repository "/ calc1" sul server B (ottengo / process / calc1) ed eliminare "calc1" dal server A.
... Durante un altro calcolo ottengo "/ process / calc2" sul server A, l'idea è anche di spostare "calc2" nella directory "/ process /" sul server B, quindi ora ho sul server B:
- / process / calc1
- / process / calc2
(e / process / sul server A è vuoto).

In che modo rsync gestirà i conflitti (sul server B) se ho un'altra cartella come "/ process / calc1" nel server A dopo un nuovo calcolo (se "/ process / calc1" esiste già sul server B)?

È possibile aggiungere regole con rsync e rinominare "/ process / calc1" con "process / calc1R2" nel server B? E così via (es: calc1R3)?

Grazie.

Risposte:


11

Se vuoi davvero usare rsync, sembra che avrai bisogno di una combinazione di --backup, --backup-dir e --suffix. Il più vicino che penso che potresti ottenere è con qualcosa del genere

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

Questo farebbe vicino a quello che vuoi, ma non rinominerebbe i file esattamente come vorresti. L'opzione --suffix aggiunge il testo alla fine di un file esistente, ma lo fa solo per il primo conflitto. Se lo avessi eseguito di nuovo, avrebbe semplicemente sovrascritto il tuo primo backup. Dovresti cambiare quel valore di suffisso ogni volta che il comando viene eseguito, il che funzionerebbe se usassi qualcosa con un timestamp, come questo:

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

Non sono sicuro che questo sia eccessivo per quello che stai cercando, ma dovrebbe soddisfare le tue esigenze.


Posso avere file di grandi dimensioni dopo il calcolo, quindi probabilmente è meglio usare rsync (in caso di problemi di rete).
user44782

1

Come suggerisce il nome, rsync viene utilizzato per sincronizzare i file. Se "sincronizzato", significa che i file sull'origine e sulla destinazione sono gli stessi. Non sembra quello che vuoi fare.

Sembra che tu voglia solo spostare alcuni file. Non è necessario utilizzare rsync per questo. Sembra che tu stia usando un Linux o un BSD. Puoi usare mv -n su ssh. L'opzione -n ​​non sovrascrive i file esistenti. Questo non è automatico al 100%. Tuttavia, non vedo come il file potrebbe già esistere nel tuo caso. I file verranno copiati dall'origine alla destinazione e quindi rimossi dall'origine. Vuoi eseguire nuovamente gli stessi calcoli? È per questo che finirai con i file con lo stesso nome? Suggerirei di aggiungere un numero di serie o di lotto al nome della cartella. Vorresti che fosse chiaro comunque. Hai qualche controllo su come viene denominata la cartella? Ulteriori dettagli? Consiglierei di inserire i comandi in uno script bash o simile.


In alcuni casi, devo eseguire di nuovo lo stesso calcolo (e questo è il motivo per cui finisco con i file con lo stesso nome). Hai ragione, aggiungere una corsa è una buona idea: in trova anche il comando mmv -a (spero che funzioni in modalità ssh, qualcuno usa già questa riga di comando?). Ho il controllo su come viene denominata la cartella.
user44782

Molto probabilmente non è installato sulla macchina. Se è il tuo computer, puoi installarlo però. Basato su Debian: sudo apt-get install mmv Potresti anche guardare in sshfs o NFS e avere i file in uscita direttamente alla destinazione finale. A meno che non sia necessaria la posizione intermedia (ispezione, modifica, ecc.). Se il collegamento tra le due macchine è inaffidabile, questa è una cattiva idea ovviamente. Il suggerimento di Paolo è buono. Tuttavia, l'aggiunta del numero di serie all'inizio sarebbe probabilmente più organizzata.
d -_- b

1
Come usi "mv -n" su ssh? Puoi usare mv su sshfs.
Guettli,

Ops ... Sì, questo lo rende più chiaro.
d -_- b

-1

Per SSH, in sintesi, utilizzare questo:

Accesso tramite shell remota:

Pull: rsync [OPTION ...] [USER @] HOST: SRC ... [DEST]

Push: rsync [OPTION ...] SRC ... [USER @] HOST: DEST

È tutto spiegato in rsync (1).

Per quanto riguarda lo scripting per un cronjob, per risincronizzare automaticamente su ssh senza richiedere una password, esaminare anche ssh-agent (1).

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.