rsync ไม่ทำงานอย่างที่คาดไว้


0

ฉันมีสคริปต์ที่ดาวน์โหลดและบีบอัดโฟลเดอร์ของเซิร์ฟเวอร์ระยะไกล (ตัวอย่าง: / home)

ฉันพยายามสร้างสคริปต์ "คืนค่า" แต่ฉันมีพฤติกรรมที่แปลก

restore.sh:

($ 1 คือที่อยู่ IP $ 2 เป็นเส้นทางแบบเต็ม)

if [ $# -lt 2 ]
then
    echo "Error"
    exit 1
else
    D=$(mktemp -d)
    echo "From $D/$2"
    echo "To user@$1:/$2"
    tar xfz /backup/$1.tar.gz -C $D
    rsync -ncavzPe ssh --partial --delete $D/$2 user@$1:/$2
    rm -r $D
    exit 0
fi

สมมติว่าเซิร์ฟเวอร์ระยะไกลคือ 127.0.0.12 และฉันต้องการคืนค่า / โฮม

$ssh 127.0.0.12
$password:
$ls /home/user
a b c x y z
$logout
$sh restore.sh 127.0.0.12 /home
From /tmp/tmp.R8iAewFEIR//home
To user@127.0.0.12://home
user@127.0.0.12's password:
sending incremental file list
home/
home/user/
home/user/1
home/user/2
home/user/.cache/
home/user/.cache/motd.legal-displayed

sent 351 bytes  received 40 bytes  46.00 bytes/sec
total size is 0  speedup is 0.00 (DRY RUN)
$

ไม่ควรลบ a, b, c, x, y และ z เป็นเพราะความแห้งหรือไม่ มันกำลังส่งไปยังโฟลเดอร์อื่นหรือไม่? ฉันทำลายเซิร์ฟเวอร์ที่พยายามทำสิ่งที่คล้ายกัน เมื่อวานและกลัวเกินไปที่จะลองโดยไม่ต้อง -n


แทน rm -r $D คุณควรใช้ trap "rm -r -- "$D" EXIT ทันทีหลังจากสร้างไดเรกทอรี
l0b0

เพื่อความปลอดภัยของคุณเองคุณควรใช้ set -o errexit -o nounset ที่ด้านบนของไฟล์ สิ่งนี้จะทำให้ exit 0 ในตอนท้ายซ้ำซ้อน
l0b0


ในโปรแกรมใด ๆ ที่มีสติ, dry-run หมายความว่าคำสั่งจะไม่เปลี่ยนแปลงหรือลบสิ่งใดก็ตามที่อยู่ในระบบก่อนที่คำสั่งจะถูกเรียกใช้ ดังนั้นฉันจะบอกว่านี่เป็นพฤติกรรมที่คาดหวังมาก ดู man rsync สำหรับรายละเอียด
l0b0

@ l0b0: ฉันรู้ถึงผลกระทบของการใช้งานแบบแห้งสิ่งที่ฉันกลัวคือการพยายามโดยไม่ใช้มันเพื่อดูว่าไฟล์จะถูกวางไว้ที่ใด อะไรนะ trap ทำ? นอกจากนี้ใบเสนอราคาหายไปไหน
DrakaSAN

คำตอบ:


0
if [ $# -lt 2 ]
then
    echo "Error"
    exit 1
else
    D=$(mktemp -d)
    echo "From $D/$2"
    echo "To user@$1:/$2"
    tar xfz /backup/$1.tar.gz -C $D
    rsync -cavzPe ssh --partial --delete $D/$2/* user@$1:/$2/
    rm -r $D
    exit 0
fi

ฉันลืมที่จะใส่ในโฟลเดอร์ในแหล่งที่มาของ rsync

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.