Làm cách nào để xóa tất cả các tệp nhỏ hơn một kích thước nhất định trong tất cả các thư mục con?


88

Tôi có một thư mục chứa nhiều thư mục con chứa các tệp tif nhỏ (dưới 160kb) đã được hợp nhất với nhau trong các tệp pdf lớn hơn, cùng với một số tệp tif lớn nhiều trang.

Tôi muốn xóa tất cả các tệp tif nhỏ mà không xóa các tệp lớn hơn (tif hoặc pdf) và giữ lại cấu trúc thư mục. Làm cách nào để sử dụng Linux trên dòng lệnh?

Câu trả lời:


155
find . -name "*.tif" -type 'f' -size -160k -delete

Chạy lệnh mà không cần -deletexác minh trước rằng các tệp chính xác được tìm thấy.

Lưu ý -trước 160k. Chỉ 160kcó nghĩa là chính xác 160 kilobyte. -160kcó nghĩa là nhỏ hơn 160 kilobyte. +160kcó nghĩa là lớn hơn 160 kilobyte.

Các -type 'f'lệnh buộc chỉ hành động trên các tập tin và bỏ qua các thư mục. điều này sẽ tránh được lỗi nếu đường dẫn chứa các thư mục có tên khớp với mẫu *.tif.

Nếu bạn muốn lọc kích thước theo byte (như 160 byte thay vì 160 kilobyte) thì bạn phải viết nó như thế này : 160c. Nếu bạn chỉ viết 160nó sẽ được hiểu là 160 * 512 byte. Đây là một yêu cầu kỳ lạ của POSIX. Đọc ở đây để biết thêm chi tiết: https://unix.stackexchange.com/questions/259208/purpose-of-find-commands-default-size-unit-512-bytes


Trang người đàn ông ubfox dường như đề cập đến điều này. Ngay bên dưới phần "KIỂM TRA": Đối số số có thể được chỉ định là + n với giá trị lớn hơn n, -n với giá trị nhỏ hơn n, n cho chính xác n.
jdg

1
cảm ơn. Tôi không biết rằng thông tin có thể ở đâu đó trong trang.
lesmana

Thật tuyệt khi lệnh này cũng hoạt động đệ quy. Trường hợp sử dụng của tôi sẽ là xóa các tệp .txt dưới 12kB.
CN

không cần sudo?
Jean-François Gagnon

11
Đối với kích thước tính theo byte chỉ định 50c, không phải 50b hoặc 50!
Đêm giao thừa
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.