Saya ingin rsync
dari komputer lokal ke server. Pada direktori yang tidak ada, dan saya ingin rsync
membuat direktori itu di server terlebih dahulu.
Bagaimana saya bisa melakukan itu?
Jika Anda memiliki lebih dari direktori leaf terakhir yang harus dibuat, Anda dapat menjalankan terpisah ssh ... mkdir -p
terlebih dahulu, atau menggunakan --rsync-path
trik seperti yang dijelaskan di sini :
rsync -a --rsync-path="mkdir -p /tmp/x/y/z/ && rsync" $source user@remote:/tmp/x/y/z/
Atau gunakan --relative
opsi seperti yang disarankan oleh Tony. Dalam hal ini, Anda hanya menentukan akar tujuan, yang harus ada, dan bukan struktur direktori sumber, yang akan dibuat:
rsync -a --relative /new/x/y/z/ user@remote:/pre_existing/dir/
Dengan cara ini, Anda akan berakhir dengan / pre_existing / dir / new / x / y / z /
Dan jika Anda ingin "y / z /" dibuat, tetapi tidak di dalam "baru / x /", Anda dapat menambahkan di ./
mana Anda ingin --relative
memulai:
rsync -a --relative /new/x/./y/z/ user@remote:/pre_existing/dir/
akan membuat / pre_existing / dir / y / z /.
mkdir
, jadi saya menggunakan hack:--rsync-path="echo f > /public/.keep && rsync /public/.keep /public/newfolder/ && rsync" \
itu membuat file tambahan tetapi Anda dapat menghapus nanti.&&
?Dengan asumsi Anda menggunakan ssh untuk menghubungkan rsync, bagaimana dengan mengirim perintah ssh sebelumnya:
jika sudah ada, tidak ada yang terjadi
sumber
rsync
, oleh karena itu, tidak ada jawaban.ssh
tidak didukung danrsync
terhubung kersync daemon
pada ujung jarak jauh.The
-R, --relative
pilihan akan melakukan hal ini.Sebagai contoh: jika Anda ingin membuat cadangan
/var/named/chroot
dan membuat struktur direktori yang sama pada server jauh maka-R
akan melakukan hal itu.sumber
/./
di jalur sumber. Lihat halaman manual untuk detailnya.rsync
tidak akan membuat direktori secara otomatis jika folder target tidak ada. Mendesah.--relative
. Mungkin tidak melakukan apa yang Anda pikirkan.--relative
dalam hubungannya dengan/./
apa yang kebanyakan pemula akan cari.rsync -avz -e ssh --progress --relative ~/./Desktop/ TARGET_IP:~/
akan menyalin konten desktop ke desktop target. Tidak tahu bagaimana perbedaan dalam nama pengguna dapat memengaruhi ini.ini bekerja untuk saya:
Saya menerima pesan ini:
tapi saya tidak perlu khawatir memiliki direktori kosong yang berkeliaran.
sumber
Saya tidak berpikir Anda bisa melakukannya dengan satu perintah rsync, tetapi Anda dapat 'membuat-pre' direktori tambahan terlebih dahulu seperti ini:
di mana 'blankdir' adalah direktori kosong lokal (yang mungkin harus Anda buat sebagai direktori sementara terlebih dahulu).
Ini sedikit peretasan, tapi berhasil untuk saya.
Bersulang
Chris
sumber
rsync /dev/null node:existing-dir/new-dir/
saran di atas.Jawaban ini menggunakan sedikit jawaban lain, tetapi semoga akan sedikit lebih jelas mengenai keadaan. Anda tidak pernah menentukan apa yang Anda rsyncing - entri direktori tunggal atau banyak file.
Jadi mari kita asumsikan Anda memindahkan entri direktori sumber, dan tidak hanya memindahkan file yang terkandung di dalamnya.
Katakanlah Anda memiliki direktori yang dipanggil secara lokal
data/myappdata/
dan Anda memiliki banyak subdirektori di bawahnya. Anda memilikidata/
pada mesin target Anda tetapi tidakdata/myappdata/
- ini cukup mudah:Anda bahkan dapat menggunakan nama lain untuk direktori jarak jauh:
Jika Anda hanya memindahkan beberapa file dan tidak memindahkan entri direktori yang berisi mereka, maka Anda akan melakukannya:
dan itu akan membuat
myappdata
direktori untuk Anda di mesin jarak jauh untuk menempatkan file Anda. Sekali lagi,data/
direktori harus ada di mesin jarak jauh.Kebetulan, saya menggunakan
-rvv
flag adalah untuk mendapatkan output verbose ganda sehingga jelas tentang apa yang dilakukannya, serta perilaku rekursif yang diperlukan.Hanya untuk menunjukkan kepada Anda apa yang saya dapatkan ketika menggunakan rsync (3.0.9 di Ubuntu 12.04)
Semoga ini mengatasinya sedikit.
sumber
rsync -rvv /path/to/data/myappdata user@host:/remote/path/to/data/myappdata
tetapi apa yang dibuat pada target adalah / remote / path / to / data / myappdata / myappdata /rsync -rvv /path/to/data/myappdata/ user@host:/remote/path/to/data/myappdata
misalnya:
dari: /xxx/a/b/c/d/e/1.html
to: user @ remote: /pre_existing/dir/b/c/d/e/1.html
rsync:
cd / xxx / a / && rsync -auvR b / c / d / e / user @ remote: / pre_existing / dir /
sumber