ฉันมีสคริปต์ที่ดาวน์โหลดและบีบอัดโฟลเดอร์ของเซิร์ฟเวอร์ระยะไกล (ตัวอย่าง: / 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
เพื่อความปลอดภัยของคุณเองคุณควรใช้
—
l0b0
set -o errexit -o nounset
ที่ด้านบนของไฟล์ สิ่งนี้จะทำให้ exit 0
ในตอนท้ายซ้ำซ้อน
ในโปรแกรมใด ๆ ที่มีสติ, dry-run หมายความว่าคำสั่งจะไม่เปลี่ยนแปลงหรือลบสิ่งใดก็ตามที่อยู่ในระบบก่อนที่คำสั่งจะถูกเรียกใช้ ดังนั้นฉันจะบอกว่านี่เป็นพฤติกรรมที่คาดหวังมาก ดู
—
l0b0
man rsync
สำหรับรายละเอียด
@ l0b0: ฉันรู้ถึงผลกระทบของการใช้งานแบบแห้งสิ่งที่ฉันกลัวคือการพยายามโดยไม่ใช้มันเพื่อดูว่าไฟล์จะถูกวางไว้ที่ใด อะไรนะ
—
DrakaSAN
trap
ทำ? นอกจากนี้ใบเสนอราคาหายไปไหน
rm -r $D
คุณควรใช้trap "rm -r -- "$D" EXIT
ทันทีหลังจากสร้างไดเรกทอรี