Tại sao tar --exclude = Lần. * Cung tạo một kho lưu trữ trống?


7

Tất cả mọi thứ tôi đọc đều nói rằng để loại trừ .svn.htaccesscác tệp ẩn khác khi tạo tệp lưu trữ tar, hãy sử dụng --exclude=".*"mẫu.

Khi tôi thử, tôi nhận được một kho lưu trữ trống. Khi tôi rời khỏi --excludetùy chọn dài, mọi thứ sẽ được lưu trữ.

Đây là toàn bộ lệnh tôi đang sử dụng:

tar -czvf ../_migrate/archive_2012-05-07.tgz --exclude=".*" ./*

Tôi cũng đã thử biến thể này, không có sự khác biệt về kết quả:

tar -czvf ../_migrate/archive_2012-05-07.tgz --exclude=".?*" ./*

Bởi vì bạn đang bảo nó loại trừ .và mọi thứ có thể tiếp cận thông qua nó ...
vonbrand

Câu trả lời:


6

Bạn dường như đang sử dụng GNU tar. Khớp mẫu trong GNU tarhoạt động trên toàn bộ đường dẫn và không dừng lại ở các /ký tự. Vì bạn đang sử dụng ./cho danh sách tệp của mình, điều đó có nghĩa là mọi tệp sẽ khớp ./*với nhau .?*. Tôi sẽ thử một cái gì đó như --exclude='.[^/]*'có lẽ.


Thay đổi lệnh của tôi để tar -czvf ../_migrate/archive_2012-05-07.tgz exclude=".*" *khắc phục sự cố, dựa trên câu trả lời của bạn. Tôi ngạc nhiên rằng nó tạo ra sự khác biệt, vì trong suy nghĩ của tôi *cũng giống như vậy ./*, nhưng rõ ràng '. / `Được thêm vào tarđường dẫn và vì vậy mọi thứ rơi vào khuôn mẫu. Vì vậy, để rõ ràng, mẫu loại trừ là tốt, đó là mẫu danh sách tệp gây ra vấn đề.
Tom Auger

10

Mẫu của bạn không bao gồm ".", Đây là thư mục bạn đang cố lưu trữ. Sử dụng ".? *" Làm mẫu thay thế.


Tôi đã tìm ra điều đó và đã thử sử dụng mẫu ".? *", Kết quả tương tự. Nhưng bạn đã khuyến khích tôi thử lại lần nữa. Tôi sẽ xác nhận.
Tom Auger

Tôi có thể xác nhận rằng --exclude = ".? *" Không khác với ". *" Trong trường hợp của tôi.
Tom Auger

Thật thú vị, thực sự. Tôi đã thử nghiệm trên Mac OS Lion; tar --version mang lại "bsdtar 2.8.3 - libarchive 2.8.3". ".? *" Hoạt động với tar này.
Kyle Jones

Âm thanh như tar GNU xử lý khớp mẫu hoặc giải thích danh sách tệp hơi khác so với bsdtar ...
Tom Auger

3

.*sẽ luôn khớp với bất kỳ tệp nào sẽ được bao gồm, vì bạn đang sử dụng các tệp từ .đó (mà ngay cả chính nó cũng khớp .*).

Bạn không cần phải làm bất cứ điều gì để loại trừ các tệp mà bạn đề cập, dù sao chúng sẽ không được khớp với toàn cầu. Toàn *cầu không khớp với các tệp có tiền tố chấm trừ khi bạn kích hoạt thủ công chức năng đó (thông qua dotglobhoặc tương đương với vỏ của bạn).


Bạn không hoàn toàn đúng về phần dấu chấm, mặc dù *không khớp với các tệp ẩn trừ khi dotglobđược đặt, các thư mục con vẫn có thể chứa các tệp ẩn được dán một cách vui vẻ nếu không sử dụng quy tắc loại trừ.
Lekensteyn

Ah! Đúng, tôi đã không xem xét điều đó.
Chris Xuống
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.