bash script để tar nhiều thư mục tên miền


0

! / thùng / bash

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

Tôi muốn sao lưu mọi thư mục public_html bên trong một tên miền ($ home / domain / site.com / public_html) và tạo tar trong $ HOME / site_backups / ngay hôm nay với tên miền. Tuy nhiên, khi tôi chạy bash scrip, tôi gặp lỗi:

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

Tại sao nó là cd đến / home / user / domain / ..? Tôi đã chỉ định $sitedir/$icó nghĩa là/home/user/domains/domain.name

Câu trả lời:


3

lschạy trong bất cứ thư mục hiện tại là gì. Từ kết quả của bạn, nó phải có được /home/user/domains/. Nếu bạn muốn làm việc trên các thư mục trong $ sitedir, trước tiên hãy thay đổi thư mục đó:

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

Bằng cách sử dụng */ở những nơi ls, shell trả về một danh sách các thư mục, dường như là những gì bạn muốn, thay vì chỉ bất kỳ tệp nào.

Cuối cùng, tôi đặt quá trình xử lý "$ 1" trong ngoặc đơn (một khung con) để khi quá trình xử lý kết thúc, tập lệnh trở lại "$ sitedir" và sẵn sàng cho vòng lặp tiếp theo.


Cảm ơn, bây giờ tôi đã gặp lỗi này: tar (con): Lỗi không thể phục hồi: thoát ngay bây giờ tar (con): /home/user/site_backups/today/domain.com/.tar.gz: Không thể mở: Không có tệp như vậy hoặc thư mục Tại sao có "/" sau tên miền? Nó phải là domain.com.tar.gz
Alexander Kim

Xin lỗi về điều đó: nó đã được sửa bây giờ. Biểu thức ${i%%/}loại bỏ dấu gạch chéo khỏi tên thư mục.
John1024

Cảm ơn. Tôi sẽ kiểm tra nó ngay bây giờ. Btw, thoát 0 có cần thiết không? Bạn có thể giúp tôi không, bây giờ tập lệnh này TAR'ing thư mục ngay cả trong thư mục site_backups.
Alexander Kim

exit 0là không cần thiết trừ khi bất cứ ai bắt đầu tập lệnh (nó có phải là cronjob không?) quan tâm đến mã thoát. exit 0báo hiệu thành công. Không có nó, tập lệnh sẽ thoát với mã thoát của tarlệnh cuối cùng .
John1024

Vâng, tôi sẽ sử dụng nó trên một cronjob. Bạn có thể cho tôi biết lý do tại sao các thư mục của tôi từ site_backups / thư mục cũng bị xóa không? Không nên chỉ TAR $ HOME / tên miền /?
Alexander Kim
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.