xóa tập tin khớp mẫu


32

Tôi cần xóa đệ quy tất cả các tệp trong tất cả các thư mục con trong đó tên tệp chứa một số theo sau là 'x' theo sau là một số, ít nhất hai lần.

Thí dụ:

Tôi muốn xóa các tệp này:

'aaa-12x123-123x12.jpg'
'aaa-12x12-123x12-12x123.jpg'

Nhưng tôi KHÔNG muốn xóa các tệp này:

'aaa.jpg'
'aaa-12x12.jpg'
'aaaxaaa-123x123.jpg'
'aaaxaaa-aaaxaaa.jpg'

Làm thế nào tôi có thể làm điều đó (từ bash shell)

Câu trả lời:


61

Một chuỗi chứa một số được theo sau bởi một số theo sau xvà chỉ khi nó chứa một chữ số theo xsau là một chữ số, tức là nếu nó chứa một chuỗi con khớp với mẫu [0-9]x[0-9]. Vì vậy, bạn đang tìm cách loại bỏ các tệp có tên phù hợp với mẫu *[0-9]x[0-9]*[0-9]x[0-9]*.jpg.

find /path/to/directory -type f -name '*[0-9]x[0-9]*[0-9]x[0-9]*.jpg' -delete

Nếu bạn findkhông có -delete, hãy gọi rmđể xóa các tập tin.

find /path/to/directory -type f -name '*[0-9]x[0-9]*[0-9]x[0-9]*.jpg' -exec rm {} +

2
Cảm ơn bạn! 12.000 tập tin đã mất tôi 2 giây. Điều đó đã tiết kiệm cho tôi một số lao động thủ công!
mikkelbreum

Không -deletephải cũng không -exec rmlàm việc cho tôi trong Bash trên Windows. Nhưng điều này đã làm:find /path/to/directory -type f -name '*[0-9]x[0-9]*[0-9]x[0-9]*.jpg' | xargs rm
Tamlyn 13/08/2015

2
@Tamlyn Sử dụng -print0xargs -0, nếu không, lệnh sẽ thất bại với tên tệp chứa dấu cách hoặc dấu ngoặc đơn. Nhưng -delete-exec rm làm việc trên Windows. Nếu một cái gì đó không hoạt động, nó không phải là do sử dụng của họ.
Gilles 'SO- ngừng trở nên xấu xa'

Điều này cũng sẽ làm việc với Windows chứ?
CodyBugstein

Nó sẽ hoạt động nếu bạn có một cổng các tiện ích Unix như Cygwin hoặc GNUWin32. Rõ ràng là nó sẽ không hoạt động ngoài Windows. Hãy cẩn thận rằng Windows có một chương trình không liên quan được gọi find, vì vậy hãy đảm bảo các tiện ích Unix được đặt trước PATH.
Gilles 'SO- ngừng trở nên xấu xa'

0

Lệnh bên phải là:

find . -type f -iregex '.*[0-9]x[0-9]*\.jpg$'

điều này sẽ chỉ lấy các tệp có tên: 'aaa-12x12.jpg', chứ không phải 'aaa-12x12red.jpg'

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.