bash script เพื่อ tar หลายโดเมนโดเมน


0

! / bin / ทุบตี

sitedir="$HOME/domains"
logs="$HOME/site_backups/log"

tbackups="$HOME/site_backups/today"
ybackups="$HOME/site_backups/yesterday"

echo "`date`"  > $logs/backups.log

for i in `ls`; do
    cd $sitedir/$i
    tar -czf $tbackups/$i".tar.gz" /public_html >> $logs/backups.log
done
exit 0

ฉันต้องการสำรองข้อมูลทุกโฟลเดอร์ public_html ภายในชื่อโดเมน ($ home / domains / site.com / public_html) และสร้าง tar ใน $ HOME / site_backups / วันนี้ด้วยชื่อโดเมน อย่างไรก็ตามเมื่อฉันเรียกใช้ทุบตีทุบตีฉันได้รับข้อผิดพลาด:

test.sh: line 12: cd: /home/user/domains/log: No such file or directory
test.sh: line 12: cd: /home/user/domains/test.sh: No such file or directory
test.sh: line 12: cd: /home/user/domains/today: No such file or directory
test.sh: line 12: cd: /home/user/domains/yesterday: No such file or directory

ทำไมมันถึง cd ถึง / home / user / domains / .. ฉันได้ระบุ$sitedir/$iซึ่งหมายความว่า/home/user/domains/domain.name

คำตอบ:


3

lsทำงานในสิ่งที่ไดเรกทอรีปัจจุบันคือ จากผลลัพธ์ของคุณมันจะต้องเป็น/home/user/domains/เช่นนั้น หากคุณต้องการทำงานกับไดเรกทอรีใน $ sitedir ให้เปลี่ยนเป็นไดเรกทอรีนั้นก่อน:

cd "$sitedir"
for i in */ ; do
    ( cd "$i" && tar -czf $tbackups/${i%%/}".tar.gz" public_html >> $logs/backups.log ; )
done

โดยการใช้*/ในสถานที่ของlsเปลือกผลตอบแทนรายชื่อของไดเรกทอรีซึ่งดูเหมือนว่าจะเป็นสิ่งที่คุณต้องการมากกว่าแค่ไฟล์ใด ๆ

สุดท้ายฉันใส่การประมวลผลของ "$ 1" ในวงเล็บ (subshell) เพื่อที่เมื่อการประมวลผลสิ้นสุดสคริปต์จะกลับมาใน "$ sitedir" และพร้อมสำหรับการวนรอบต่อไป


ขอบคุณตอนนี้ฉันได้รับข้อผิดพลาดนี้: tar (child): ข้อผิดพลาดไม่สามารถกู้คืนได้: ออกจากขณะนี้ tar (child): /home/user/site_backups/today/domain.com/.tar.gz: ไม่สามารถเปิดไฟล์: ไม่มีไฟล์ดังกล่าวหรือ ไดเรกทอรีทำไมจึงมี "/" หลังชื่อโดเมน ควรเป็น domain.com.tar.gz
Alexander Kim

ขออภัยเกี่ยวกับสิ่งนั้น: ได้รับการแก้ไขแล้ว การแสดงออก${i%%/}ลบสแลชต่อท้ายจากชื่อไดเรกทอรี
John1024

ขอบคุณ ฉันจะทดสอบมันตอนนี้ Btw จำเป็นต้องออกจาก 0 หรือไม่ คุณช่วยได้ไหมตอนนี้สคริปต์นี้ TAR'ing โฟลเดอร์แม้ในไดเรกทอรี site_backups
อเล็กซานเดอร์คิม

exit 0ไม่จำเป็นเว้นแต่ว่าใครก็ตามที่เริ่มต้นสคริปต์ (มันเป็น cronjob?) ใส่ใจกับรหัสทางออก exit 0สัญญาณความสำเร็จ ก็ไม่มีสคริปต์จะออกด้วยรหัสทางออกของtarคำสั่งสุดท้าย
John1024

ใช่ฉันจะใช้มันใน cronjob คุณบอกฉันได้ไหมว่าเพราะเหตุใดไดเรกทอรีของฉันจาก site_backups / โฟลเดอร์จึงไม่อยู่เช่นกัน ไม่ควร TAR เพียง $ HOME / domains /?
อเล็กซานเดอร์คิม
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.