Tôi có lệnh sau trong phần kịch bản lệnh shell dự phòng:
tar -cjf site1.bz2 /var/www/site1/
Khi tôi liệt kê nội dung của kho lưu trữ, tôi nhận được:
tar -tf site1.bz2
var/www/site1/style.css
var/www/site1/index.html
var/www/site1/page2.html
var/www/site1/page3.html
var/www/site1/images/img1.png
var/www/site1/images/img2.png
var/www/site1/subdir/index.html
Nhưng tôi muốn xóa phần này /var/www/site1
khỏi tên thư mục và tệp trong kho lưu trữ, để đơn giản hóa việc trích xuất và tránh cấu trúc thư mục không đổi vô dụng. Không bao giờ biết, trong trường hợp tôi sẽ trích xuất các trang web được sao lưu ở nơi lưu trữ dữ liệu web /var/www
.
Đối với ví dụ trên, tôi muốn có:
tar -tf site1.bz2
style.css
index.html
page2.html
page3.html
images/img1.png
images/img2.png
subdir/index.html
Vì vậy, khi tôi giải nén, các tệp được trích xuất trong thư mục hiện tại và tôi không cần phải di chuyển các tệp được trích xuất sau đó, và để các cấu trúc thư mục con được giữ nguyên.
Đã có nhiều câu hỏi về tar và sao lưu trong stackoverflow
và ở những nơi khác trên web, nhưng hầu hết trong số họ yêu cầu bỏ toàn bộ cấu trúc thư mục con (làm phẳng), hoặc chỉ thêm hoặc xóa tên ban đầu / trong tên (tôi không ' t biết những gì nó thay đổi chính xác khi giải nén), nhưng không còn nữa.
Sau khi đọc một số giải pháp được tìm thấy ở đây và ở đó cũng như hướng dẫn, tôi đã thử:
tar -cjf site1.bz2 -C . /var/www/site1/
tar -cjf site1.bz2 -C / /var/www/site1/
tar -cjf site1.bz2 -C /var/www/site1/ /var/www/site1/
tar -cjf site1.bz2 --strip-components=3 /var/www/site1/
Nhưng không ai trong số họ làm việc theo cách tôi muốn. Một số không làm gì cả, một số khác không lưu trữ các thư mục con nữa.
Nó nằm trong tập lệnh shell dự phòng được khởi chạy bởi Cron, vì vậy tôi không biết rõ, người dùng nào chạy nó, đường dẫn và thư mục hiện tại là gì, vì vậy luôn luôn viết đường dẫn tuyệt đối cho mọi thứ và không muốn thay đổi thư mục hiện tại để tránh phá vỡ thứ gì đó hơn nữa trong tập lệnh (vì nó không chỉ sao lưu các trang web, mà còn cả cơ sở dữ liệu, sau đó gửi tất cả những thứ đó đến FTP, v.v.)
Làm thế nào để đạt được điều này?
Có phải tôi đã hiểu sai về cách thức hoạt động của tùy chọn -C?
-C
chỉ có nghĩa là "thay đổi thư mục", trong khi thay thế một đường dẫn (hoặc tiền tố) chỉ có thể được thực hiện bởi --transform
. súng trường. superuser.com/questions/595510/prepend-prefix-in-tar/595512 bạn có thể đơn giản -C (thay đổi thư mục) và --transform nó: `` `tar cjf site1.bz2 --transform" s / ^ \. \ // $ targetbase / "-C / var / www / site1. `` `