ฉันต้องการrsync
จากเครื่องคอมพิวเตอร์ไปยังเซิร์ฟเวอร์ ในไดเรกทอรีที่ไม่มีอยู่และฉันต้องการrsync
สร้างไดเรกทอรีนั้นบนเซิร์ฟเวอร์ก่อน
ฉันจะทำสิ่งนั้นได้อย่างไร
ฉันต้องการrsync
จากเครื่องคอมพิวเตอร์ไปยังเซิร์ฟเวอร์ ในไดเรกทอรีที่ไม่มีอยู่และฉันต้องการrsync
สร้างไดเรกทอรีนั้นบนเซิร์ฟเวอร์ก่อน
ฉันจะทำสิ่งนั้นได้อย่างไร
คำตอบ:
หากคุณมีมากกว่าไดเรกทอรีใบไม้สุดท้ายที่จะสร้างคุณสามารถเรียกใช้แยกต่างหากssh ... mkdir -p
ก่อนหรือใช้--rsync-path
เคล็ดลับตามที่อธิบายไว้ที่นี่ :
rsync -a --rsync-path="mkdir -p /tmp/x/y/z/ && rsync" $source user@remote:/tmp/x/y/z/
หรือใช้--relative
ตัวเลือกตามที่โทนี่แนะนำ ในกรณีดังกล่าวคุณเพียงระบุรูทปลายทางซึ่งจะต้องมีอยู่และไม่ใช่โครงสร้างไดเรกทอรีของซอร์สซึ่งจะถูกสร้างขึ้น:
rsync -a --relative /new/x/y/z/ user@remote:/pre_existing/dir/
ด้วยวิธีนี้คุณจะท้ายด้วย / pre_existing / dir / new / x / y / z /
และหากคุณต้องการสร้าง "y / z /" แต่ไม่ได้อยู่ใน "new / x /" คุณสามารถเพิ่ม./
ตำแหน่งที่คุณต้องการ--relative
เริ่ม:
rsync -a --relative /new/x/./y/z/ user@remote:/pre_existing/dir/
จะสร้าง / pre_existing / dir / y / z /
&&
หรือไม่
สมมติว่าคุณกำลังใช้ ssh เพื่อเชื่อมต่อ rsync สิ่งที่จะส่งคำสั่ง ssh ก่อน:
ssh user@server mkdir -p existingdir/newdir
ถ้ามันมีอยู่แล้วไม่มีอะไรเกิดขึ้น
rsync
ดังนั้นจึงไม่มีคำตอบ
ssh
ไม่ได้รับการสนับสนุนและrsync
เชื่อมต่อกับrsync daemon
บนรีโมทปลายทาง
-R, --relative
ตัวเลือกที่จะทำเช่นนี้
ตัวอย่างเช่น: หากคุณต้องการสำรองข้อมูล/var/named/chroot
และสร้างโครงสร้างไดเรกทอรีเดียวกันบนเซิร์ฟเวอร์ระยะไกล-R
จะทำเช่นนั้น
/./
ในเส้นทางที่มา ดูหน้าคนสำหรับรายละเอียด
rsync
จะไม่สร้างไดเรกทอรีโดยอัตโนมัติหากไม่มีโฟลเดอร์เป้าหมาย ถอนหายใจ
--relative
สำหรับ มันอาจไม่ทำในสิ่งที่คุณคิด
--relative
ร่วมกับ/./
เป็นสิ่งที่มือใหม่ส่วนใหญ่จะมองหา rsync -avz -e ssh --progress --relative ~/./Desktop/ TARGET_IP:~/
จะคัดลอกเนื้อหาของเดสก์ท็อปไปยังเดสก์ท็อปเป้าหมาย ไม่ทราบว่าความแตกต่างของชื่อผู้ใช้อาจมีผลกับเรื่องนี้อย่างไร
สิ่งนี้ใช้ได้กับฉัน:
rsync /dev/null node:existing-dir/new-dir/
ฉันได้รับข้อความนี้:
skipping non-regular file "null"
แต่ฉันไม่ต้องกังวลเกี่ยวกับการมีไดเรกทอรีว่างเปล่าห้อยอยู่
ฉันไม่คิดว่าคุณสามารถทำได้ด้วยคำสั่ง rsync เดียว แต่คุณสามารถ 'สร้างล่วงหน้า' ไดเรกทอรีพิเศษก่อนเช่นนี้:
rsync --recursive emptydir/ destination/newdir
โดยที่ 'emptydir' เป็นไดเรกทอรีว่างในเครื่อง (ซึ่งคุณอาจต้องสร้างเป็นไดเรกทอรีชั่วคราวก่อน)
มันเป็นบิตของการแฮ็ก แต่มันใช้ได้กับฉัน
ไชโย
คริส
rsync /dev/null node:existing-dir/new-dir/
คำแนะนำด้านบน
คำตอบนี้ใช้บิตของคำตอบอื่น ๆ แต่หวังว่ามันจะชัดเจนขึ้นเล็กน้อยตามสถานการณ์ คุณไม่เคยระบุสิ่งที่คุณกำลัง rsyncing - รายการไดเรกทอรีเดียวหรือหลายไฟล์
ดังนั้นสมมติว่าคุณกำลังย้ายรายการไดเรกทอรีต้นทางข้ามและไม่ใช่แค่ย้ายไฟล์ที่อยู่ในนั้น
สมมติว่าคุณมีไดเรกทอรีที่เรียกว่าภายในเครื่องdata/myappdata/
และคุณมีไดเรกทอรีย่อยที่อยู่ภายใต้การโหลด คุณมีdata/
เครื่องเป้าหมาย แต่ไม่data/myappdata/
- มันง่ายพอ:
rsync -rvv /path/to/data/myappdata/ user@host:/remote/path/to/data/myappdata
คุณสามารถใช้ชื่ออื่นสำหรับไดเรกทอรีระยะไกล:
rsync -rvv --recursive /path/to/data/myappdata user@host:/remote/path/to/data/newdirname
หากคุณเพิ่งย้ายไฟล์บางไฟล์และไม่ย้ายรายการไดเรกทอรีที่มีไฟล์อยู่คุณจะต้อง:
rsync -rvv /path/to/data/myappdata/*.txt user@host:/remote/path/to/data/myappdata/
และมันจะสร้างmyappdata
ไดเรกทอรีสำหรับคุณบนเครื่องระยะไกลเพื่อวางไฟล์ของคุณอีกครั้งdata/
ไดเรกทอรีจะต้องมีอยู่ในเครื่องระยะไกล
อนึ่งการใช้-rvv
แฟล็กของฉันคือการรับเอาท์พุทแบบ verbose สองเท่าดังนั้นจึงชัดเจนเกี่ยวกับสิ่งที่มันทำรวมถึงพฤติกรรมการเรียกซ้ำที่จำเป็น
เพียงเพื่อแสดงให้คุณเห็นสิ่งที่ฉันได้รับเมื่อใช้ rsync (3.0.9 บน Ubuntu 12.04)
$ rsync -rvv *.txt user@remote.machine:/tmp/newdir/
opening connection using: ssh -l user remote.machine rsync --server -vvre.iLsf . /tmp/newdir/
user@remote.machine's password:
sending incremental file list
created directory /tmp/newdir
delta-transmission enabled
bar.txt
foo.txt
total: matches=0 hash_hits=0 false_alarms=0 data=0
หวังว่านี่จะเป็นการลบล้างสิ่งเล็กน้อย
rsync -rvv /path/to/data/myappdata user@host:/remote/path/to/data/myappdata
แต่สิ่งที่สร้างขึ้นบนเป้าหมายคือ / remote / path / to / data / myappdata / myappdata /
rsync -rvv /path/to/data/myappdata/ user@host:/remote/path/to/data/myappdata
เช่น:
จาก: /xxx/a/b/c/d/e/1.html
ถึง: user @ remote: /pre_existing/dir/b/c/d/e/1.html
rsync:
cd / xxx / a / && rsync -auvR b / c / d / e / ผู้ใช้ @ remote: / pre_existing / dir /
mkdir
ดังนั้นฉันใช้แฮก:--rsync-path="echo f > /public/.keep && rsync /public/.keep /public/newfolder/ && rsync" \
มันสร้างไฟล์พิเศษ แต่คุณสามารถลบได้ในภายหลัง