Mendapatkan rsync untuk memindahkan file dari sumber ke tujuan?

15

Apakah rsync adalah pilihan yang baik untuk proyek saya?

Saya harus:
- menyalin file dari folder sumber ke tujuan melalui SSH,
- pastikan semua file disalin,
- hapus file sumber setelah salinan.
- jika saya memiliki nama konflik, saya harus mengganti nama file.

Sepertinya saya bisa menggunakan opsi: --remove-source-files (untuk menghapus file sumber)
Tapi bagaimana rsync mengelola konflik, dapatkah saya memiliki aturan?

Gunakan kasing pada proyek saya:

Saya menjalankan perhitungan ilmiah pada server A dan hasilnya dimasukkan ke folder "proses", untuk setiap perhitungan saya memiliki repositori seperti ini: / process / calc1.
Sekarang saya ingin mentransfer repositori "/ calc1" ke server B (saya dapatkan / proses / calc1), dan hapus "calc1" dari server A.
... Selama perhitungan lain saya mendapatkan "/ process / calc2" di server A, idenya juga untuk memindahkan "calc2" di direktori "/ process /" di server B, maka saya sekarang di server B:
- / process / calc1
- / process / calc2
(dan / process / pada server A kosong).

Bagaimana rsync akan mengelola konflik (di server B) jika saya memiliki folder lain seperti "/ process / calc1" di server A setelah perhitungan baru (jika "/ proses / calc1" sudah ada di server B)?

Apakah mungkin untuk menambahkan aturan dengan rsync, dan mengganti nama "/ process / calc1" dengan "process / calc1R2" di server B? Dan seterusnya (mis: calc1R3)?

Terima kasih.

pengguna44782
sumber

Jawaban:

11

Jika Anda benar-benar ingin menggunakan rsync, sepertinya Anda memerlukan kombinasi --backup, --backup-dir, dan --suffix. Yang paling dekat saya pikir Anda bisa dapatkan adalah dengan sesuatu seperti ini

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

Ini akan mendekati apa yang Anda inginkan, tetapi itu tidak akan mengubah nama file persis seperti yang Anda inginkan. Opsi --suffix menambahkan teks ke akhir file yang sudah ada, tetapi hanya melakukan ini untuk konflik pertama. Jika Anda menjalankannya lagi, itu hanya akan menimpa cadangan pertama Anda. Anda harus mengubah nilai akhiran itu setiap kali perintah dijalankan, yang akan berfungsi jika Anda menggunakan sesuatu dengan cap waktu, seperti ini:

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

Saya tidak yakin apakah ini berlebihan untuk apa yang Anda cari, tetapi harus memenuhi persyaratan Anda.

Paul Kroon
sumber
Saya dapat memiliki file besar setelah perhitungan, jadi mungkin lebih baik menggunakan rsync (jika terjadi masalah jaringan).
user44782
1

Sesuai namanya, rsync digunakan untuk menyinkronkan file. Ketika "disinkronkan", ini berarti bahwa file pada sumber dan tujuan adalah sama. Itu tidak tampak seperti apa yang ingin Anda lakukan.

Sepertinya Anda hanya ingin memindahkan beberapa file. Anda tidak perlu menggunakan rsync untuk itu. Sepertinya Anda menggunakan linux atau BSD. Anda bisa menggunakan mv -n di atas ssh. Opsi -n tidak menimpa file yang ada. Ini bukan 100% otomatis. Namun, saya tidak melihat bagaimana file tersebut sudah ada dalam kasus Anda. File akan disalin dari sumber ke tujuan dan kemudian dihapus dari sumber. Apakah Anda ingin menjalankan perhitungan yang sama lagi? Apakah itu sebabnya Anda akan berakhir dengan file dengan nama yang sama? Saya sarankan menambahkan nomor run atau batch ke nama folder. Anda ingin itu tetap jelas. Apakah Anda memiliki kendali atas nama folder? Ada detail lebih lanjut? Saya akan merekomendasikan menempatkan perintah dalam skrip bash atau serupa.

d -_- b
sumber
Dalam beberapa kasus, saya harus menjalankan perhitungan yang sama lagi (dan itu sebabnya saya berakhir dengan file dengan nama yang sama). Anda benar, menambahkan menjalankan adalah ide yang baik: di temukan juga perintah mmv -a (saya harap ini bekerja dalam mode ssh, seseorang sudah menggunakan baris perintah ini?). Saya memiliki kendali atas bagaimana folder dinamai.
user44782
Kemungkinan besar tidak terpasang pada mesin. Jika itu adalah mesin Anda, Anda dapat menginstalnya. Berbasis Debian: sudo apt-get install mmv Anda juga bisa melihat ke sshfs atau NFS dan memiliki output file langsung ke tujuan akhir. Kecuali jika ada kebutuhan untuk lokasi perantara (inspeksi, modifikasi, dll). Jika hubungan antara kedua mesin tidak dapat diandalkan, itu ide yang buruk tentu saja. Saran Paul bagus. Padahal, menambahkan nomor run pada awalnya mungkin akan lebih terorganisir.
d -_- b
1
Bagaimana Anda menggunakan "mv -n" di ssh? Anda dapat menggunakan mv lebih dari sshfs.
guettli
Ops ... Ya, itu membuatnya lebih jelas.
d -_- b
-1

Untuk SSH, secara ringkas, gunakan ini:

Akses melalui shell jarak jauh:

Tarik: rsync [OPSI ...] [USER @] PEMBAWA ACARA: SRC ... [DEST]

Push: rsync [OPTION ...] SRC ... [USER @] PEMBAWA ACARA: DEST

Semuanya dijelaskan dalam rsync (1).

Adapun scripting untuk cronjob, untuk rsync atas ssh secara otomatis tanpa memerlukan kata sandi, lihat juga ssh-agent (1).


sumber