2009-06-27 7 views
5

Kịch bản: Tôi có một thư mục trên máy chủ lưu trữ trang web chứa hàng trăm hình ảnh do người dùng gửi. Tôi đang tạo một kịch bản sao lưu có tất cả các hình ảnh từ thư mục và nén chúng thành một tệp .tar.gz. Lệnh tôi có cho đến nay là:

tar -czpf đường /path/to/backups/my_backup.tar.gz/to/images/

Vấn đề: Không bên trong con đường của tôi/to/images/Tôi có một thư mục có tên tmp /. Khi tôi chạy lệnh, tôi nhận được tệp .tar.gz chứa tất cả hình ảnh trong đường dẫn/đến/hình ảnh/thư mục và thư mục con được gọi là tmp /.

Câu hỏi: Làm cách nào để nhận lệnh bỏ qua/không bao gồm thư mục tmp/thư mục con trong tệp .tar.gz.Lệnh tar của Linux: nén thư mục nhưng trừ các thư mục con

Cảm ơn một triệu trước.

Trả lời

12

Bạn đang tìm kiếm đối số --exclude.

--exclude=PATTERN 

Một số người dùng tìm thấy exclude tùy chọn gây nhầm lẫn. Dưới đây là một số cạm bẫy phổ biến:

  • Các chế độ hoạt động chính của tar không hành động dựa trên một tên đường dẫn được liệt kê một cách rõ ràng trên dòng lệnh nếu một trong các tên file của nó thành phần bị loại trừ. Trong ví dụ trên, nếu bạn tạo một kho lưu trữ và loại trừ các tệp kết thúc bằng *.o, nhưng rõ ràng tên tệp dir.o/foo sau khi tất cả các tùy chọn đã được liệt kê, dir.o/foo sẽ bị loại trừ khỏi lưu trữ.

  • Đôi khi bạn có thể nhầm lẫn ý nghĩa của --exclude=PATTERN--exclude-from=FILE-OF-PATTERNS (-X FILE-OF-PATTERNS). Hãy cẩn thận : sử dụng --exclude=PATTERN khi tệp bị loại trừ là được đưa ra làm mẫu trên dòng lệnh. Sử dụng --exclude-from=FILE-OF-PATTERNS để giới thiệu tên của tệp chứa danh sách các mẫu, một mẫu trên mỗi dòng; mỗi mẫu này có thể loại trừ 0, một hoặc nhiều tệp.

  • Khi bạn sử dụng --exclude=PATTERN, hãy đảm bảo báo giá tham số PATTERN , do đó, GNU tar thấy các ký tự đại diện như *. Nếu bạn không làm điều này, trình bao có thể tự mở rộng * bằng cách sử dụng các tệp , vì vậy, tar có thể nhận danh sách tệp thay vì một mẫu hoặc không có gì. Điều này có thể không tương ứng với những gì bạn muốn.

Ví dụ, viết:

$ tar -c -f ARCHIVE.TAR --exclude '*.o' DIRECTORY 

hơn:

$ tar -c -f ARCHIVE.TAR --exclude *.o DIRECTORY 
  • Bạn phải sử dụng sử dụng cú pháp vỏ, hoặc globbing, chứ không phải là regexp cú pháp, khi sử dụng loại trừ tùy chọn trong tar. Nếu bạn cố gắng sử dụng cú pháp regexp để mô tả các tệp bị loại trừ, lệnh của bạn có thể không thành công.
+0

Cảm ơn bạn đã trả lời. Bạn đang rất đúng --exclude có thể là một chút bối rối. Tôi không hiểu nó 100% bản thân mình cho đến khi tôi đọc lời giải thích của bạn. Cảm ơn bạn – VinkoCM

3
tar -czpf /path/to/backups/my_backup.tar.gz --exclude path/to/images/tmp path/to/images/ 
0

này nên làm việc (giả sử GNU tar):

tar -czpf /path/to/backups/my_backup.tar.gz --exclude=tmp path/to/images/