2012-04-09 31 views
37

Tôi đang tìm lệnh Unix để in các tệp có kích thước của nó. Tôi đã sử dụng nhưng nó không hoạt động.Tìm tệp có kích thước trong Unix

find . -size +10000k -print. 

Tôi muốn in kích thước của tệp cùng với tên tệp/thư mục.

+2

Đó chỉ huy mang lại cho tôi 'find: vị lạ '-print.'' Tôi đoán các' .' là không thực sự ở đó. Độ chính xác là quan trọng. –

+0

Stack Overflow là trang web cho các câu hỏi lập trình và phát triển. Câu hỏi này dường như không có chủ đề vì nó không phải là về lập trình hay phát triển. Xem [Tôi có thể hỏi những chủ đề gì ở đây] (http://stackoverflow.com/help/on-topic) trong Trung tâm trợ giúp. Có lẽ [Super User] (http://superuser.com/) hoặc [Unix & Linux Stack Exchange] (http://unix.stackexchange.com/) sẽ là một nơi tốt hơn để hỏi. Đồng thời xem [Tôi nên đăng câu hỏi về Dev Ops ở đâu?] (Http://meta.stackexchange.com/q/134306) – jww

Trả lời

37
find . -size +10000k -exec ls -sd {} + 

Nếu phiên bản của find sẽ không chấp nhận + ký hiệu (có vai trò giống như xargs làm), sau đó bạn có thể sử dụng (GNU findxargs, vì vậy find lẽ hỗ trợ + anyway):

find . -size +10000k -print0 | xargs -0 ls -sd 

hoặc bạn có thể thay thế + bằng \; (và sống với sự kém hiệu quả tương đối của điều này) hoặc bạn có thể gặp phải sự cố do không gian trong tên và sử dụng di động:

find . -size +10000k -print | xargs ls -sd 

Các -d trên ls lệnh đảm bảo rằng nếu một thư mục được từng được tìm thấy (không, nhưng ...), sau đó các thông tin thư mục sẽ được in, không phải các tập tin trong thư mục. Và nếu bạn đang tìm kiếm tệp có dung lượng lớn hơn 1 MB (như nhận xét đã xóa), bạn cần điều chỉnh +10000k thành 1000k hoặc có thể +1024k hoặc +2048 (đối với khối 512 byte, đơn vị mặc định cho -size) . Điều này sẽ liệt kê kích thước và sau đó là tên tệp. Bạn có thể tránh sự cần thiết cho -d bằng cách thêm -type f vào lệnh find, tất nhiên.

+0

cảm ơn. Tôi đã sử dụng số tìm. -size + 300000k -print | xargs ls -sd 2>/dev/null –

3

Giả sử bạn đã GNU tìm:

find . -size +10000k -printf '%s %f\n' 

Nếu bạn muốn có một chiều rộng cố định cho lĩnh vực kích thước, bạn có thể làm một cái gì đó như:

find . -size +10000k -printf '%10s %f\n' 

Lưu ý rằng -size +1000k chọn file tối thiểu là 10.240.000 byte (k là 1024, không phải 1000). Bạn đã nói trong một nhận xét rằng bạn muốn các tệp lớn hơn 1 triệu; nếu đó là 1024 * 1024 byte, thì đây:

find . -size +1M ... 

sẽ làm các trick - ngoại trừ việc nó cũng sẽ in kích thước và tên của file mà chính xác 1024 * 1024 byte. Nếu điều đó quan trọng, bạn có thể sử dụng:

find . -size +1048575c ... 

Bạn cần quyết định tiêu chí bạn muốn.

+0

Bạn sẽ cần 'c' sau' + 1048575' để nhận byte (ký tự) thay vì mặc định là các khối 512 byte. –

+0

@JonathanLeffler: Đã sửa lỗi, cảm ơn bạn! –

7

Tìm có thể được sử dụng để in kích thước tệp theo byte bằng% s dưới dạng printf. % h /% f in tiền tố thư mục và tên tệp tương ứng. \ n bắt buộc một dòng mới.

Ví dụ

find . -size +10000k -printf "%h/%f,%s\n" 

Output

./DOTT/extract/DOTT/TENTACLE.001,11358470 
./DOTT/Day Of The Tentacle.nrg,297308316 
./DOTT/foo.iso,297001116 
+0

Thú vị. Điều đó nên được ghi lại dưới dạng phần mở rộng GNU (tôi giả định) theo tiêu chuẩn POSIX ['find'] (http://pubs.opengroup.org/onlinepubs/9699919799/utilities/find.html). –

Các vấn đề liên quan