Làm cách nào để loại trừ các tệp khỏi kho lưu trữ TAR bằng các biểu thức thông thường?


10

Tôi có một câu hỏi đơn giản, nhưng tôi không thể tìm hoặc giải được câu trả lời. Tôi muốn tạo một kho lưu trữ tar, nhưng tôi muốn loại trừ một số tệp khỏi nó bằng biểu thức thông thường.

Ví dụ về tệp để loại trừ là: 68x640X480.jpg

Tôi đã thử điều này mà không có may mắn:

tar cvf test.tar --exclude=[0-9]+x[0-9X]+\.jpg /data/foto

Ai có thể giúp đỡ?

Câu trả lời:


11

Bạn có thể sử dụng một số công cụ bổ sung như findegrep:

find directory/ -type f -print | egrep -v '[0-9]+x[0-9X]+\.jpg' | tar cvfz directory.tar.gz -T -

Hạn chế của phương pháp được đề cập ở trên là nó sẽ không hoạt động đối với tất cả các tên tệp có thể. Một cơ hội khác là sử dụng chức năng loại trừ tích hợp của tar:

tar -czvf directory.tar.gz --exclude='*x*X*.jpg' directory

Thật không may, phương thức thứ hai không hoạt động với các biểu thức thông thường, mà chỉ với các ký tự đại diện.


Cảm ơn, đây là những gì tôi đang tìm kiếm. Bạn có thể vui lòng ghi chú về những tên tập tin sẽ không hoạt động? vd: chứa những ký tự nào?
Frodik

Bạn không nên lo lắng quá nhiều về điều đó - hầu hết các tên tệp hoạt động hoàn toàn tốt với giải pháp đó. Vấn đề là tên tệp UNIX / Linux có thể bao gồm khá nhiều thứ, thậm chí cả các ký tự điều khiển - các kết hợp tối nghĩa như vậy sẽ không hoạt động với giải pháp đầu tiên.
Vladimir Blaskov

Một cách đọc hay liên quan đến tên tệp UNIX / Linux / POSIX: dwheeler.com/essays/fixing-unix-linux-filenames.html
Vladimir Blaskov

0

Có lẽ bạn nên thử cpio

http://cybertiggyr.com/cpio-howto

Nó đọc từ danh sách tập tin và lưu trữ. Bạn có thể tạo một danh sách tập tin bằng cách sử dụng sed như được đưa ra dưới đây.

ls |sed   '/[0-9]*x[0-9]*X.*/d' >/tmp/files

Sau đó, bạn có thể sử dụng nó làm đầu vào cho cpio.

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.