2012-03-18 38 views
5


Tôi đang cố gắng tìm ra cách sắp xếp danh sách tệp theo tên và kích cỡ.
Làm cách nào để sắp xếp theo tên và kích thước tệp bằng cách sử dụng "du -a" và không hiển thị thư mục?
Bash - Danh sách và sắp xếp tệp và kích thước của chúng và theo tên và kích thước

Sử dụng "du -a"

1 ./locatedFiles 
0 ./testDir/j.smith.c 
0 ./testDir/j.smith 
1 ./testDir/sampleFunc/arrays 
2 ./testDir/sampleFunc 
0 ./testDir/j.smith.txt 
0 ./testDir/testing 
0 ./testDir/test2 
0 ./testDir/test3 
0 ./testDir/test1 
0 ./testDir/first/j.smith 
0 ./testDir/first/test 
1 ./testDir/first 
1 ./testDir/second 
1 ./testDir/third 
6 ./testDir 

Làm thế nào tôi có thể liệt kê tất cả các file mà không cần danh bạ, thêm các tập tin kích thước, và sắp xếp theo file tên đầu tiên, sau đó theo quy mô?

Nhờ sự giúp đỡ của bạn

+0

Bạn có muốn nó được sắp xếp trên tên tệp không? hoặc đường dẫn? – thekbb

Trả lời

18

Bạn có thể sử dụng này:

find -type f -printf "%f %s %p\n"|sort 

Giải thích:

  • -type f để tìm các tập tin chỉ
  • -printf để in sản lượng nói riêng định dạng:
    • % f để in tệp n ame
    • % s để in kích thước tệp
    • % p để in toàn bộ tên tệp (tức là với các thư mục hàng đầu) - bạn có thể bỏ qua điều này nếu bạn muốn

Sau đó chạy qua loại mà sắp xếp theo thứ tự đưa ra ở trên (ví dụ: tên file, sau đó kích thước tập tin, sau đó tập tin đường dẫn). Kết quả sẽ là một cái gì đó như thế này (một phần của đầu ra hiển thị):

... 
XKBstr.h 18278 ./extensions/XKBstr.h 
XlibConf.h 1567 ./XlibConf.h 
Xlib.h 99600 ./Xlib.h 
Xlibint.h 38897 ./Xlibint.h 
Xlocale.h 1643 ./Xlocale.h 
xlogo11 219 ./bitmaps/xlogo11 
.... 

Hope this helps

+0

Cảm ơn! Đó là chính xác những gì tôi cần. – jao

+0

Tuyệt vời, rất vui được giúp đỡ! –

+0

Câu trả lời tuyệt vời cũng giúp ích cho tôi. Cảm ơn bạn! – Tastybrownies

7

Bạn có thể sử dụng sort lệnh

$ find -type f -printf $'%s\t%f\n' | sort -k2,2 -k1,1n 

sắp xếp theo lĩnh vực thứ hai (tên), thì trường đầu tiên (kích thước) bằng số.

+0

Lưu ý rằng các tùy chọn 'sắp xếp' này (cần sửa đổi) cũng được yêu cầu cho phương thức' -printf'. Bạn cũng có thể muốn xóa các trường, ví dụ: sử dụng 'cắt' hoặc một số trường như vậy. – torek

+0

bạn có thể '--max-depth = 1' thành' du' để giới hạn chỉ vào thư mục hiện tại, nhưng nó vẫn sẽ liệt kê các thư mục chứ không phải nội dung của nó. –

1

Như các câu trả lời khác cho đến nay, đây không phải là vấn đề thực sự.

du khá nhiều khẳng định về việc cho bạn biết về các thư mục: nếu bạn trỏ nó vào một thư mục, thì có hoặc không có -a nó sẽ cho bạn biết về nó.

Nếu bạn có GNU du, tuy nhiên, bạn có thể nói với nó để đọc một danh sách tên tập tin NUL-chấm dứt từ stdin, vì vậy bạn có thể sử dụng để sản xuất find danh sách: find ... -print0 | du --files0-from=- (bạn không cần -a cờ đây). (Nếu bạn không có tùy chọn --files0-from bạn vẫn có thể gọi du tương đối hiệu quả sử dụng xargs; xem tài liệu xargs.)

Nếu bạn có GNU du, tuy nhiên, bạn có thể có GNU find, trong đó có -printf như mô tả của @ icyrock.com. Chỉ cần sử dụng đó.Sau đó, sử dụng rõ ràng sort.

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