2012-03-18 34 views
5


我想弄清楚如何按名稱和大小對文件列表進行排序。
如何使用「du -a」按文件名和大小進行排序而不顯示目錄?
Bash - 列表和排序文件及其大小和名稱和大小

使用「杜-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 

我怎麼能不列出目錄中的所有文件,添加文件大小和排序文件名頭,然後按尺寸?

感謝您的幫助

+0

是否要按文件名排序?或路徑? – thekbb 2012-03-18 01:02:54

回答

18

您可以使用此:

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

說明:

  • 型的F查找文件只
  • -printf打印在特定的輸出格式:
    • %f打印文件n ame
    • %s打印文件大小
    • %p打印整個文件的名稱(即,與領先的文件夾) - 你可以忽略這一點,如果你想

然後通過運行該排序中排序以上(即文件名給定的順序,然後文件大小,那麼文件路徑)。輸出會是這樣的(顯示輸出的一部分):

... 
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 
.... 

希望這有助於

+0

謝謝!那正是我需要的。 – jao 2012-03-18 01:01:30

+0

很酷,很高興幫助! – 2012-03-18 01:02:03

+0

幫助我的優秀答案。謝謝! – Tastybrownies 2013-09-04 03:03:39

7

您可以通過第二個字段(名稱)使用sort命令

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

排序,然後以數字方式第一個字段(大小)。

+0

請注意,'-printf'方法也需要這些'sort'選項(加以必要的修改)。您可能還想刪除字段,例如使用「剪切」或其他方法。 – torek 2012-03-18 01:06:09

+0

您可以'--max-depth = 1'到'du'來僅限制當前文件夾,但它仍然會列出文件夾但不包含其內容。 – 2012-03-18 01:09:41

1

至於其他答案至今說,這不是一個真正的bash問題。

du幾乎堅持告訴你有關目錄:如果你指向一個目錄,然後有或沒有-a它會告訴你有關它。

如果你有GNU du,不過,你可以告訴它從stdin讀取NULL結尾的文件名的列表,所以你可以使用find製作名單:find ... -print0 | du --files0-from=-(你不需要-a標誌這裏)。 (如果您沒有--files0-from選項,您可以使用相對有效xargs仍然調用du;看到xargs文檔)。

如果你有GNU du,不過,你可能有GNU find,如由具有-printf @ icyrock.com。只要使用它。然後使用明確的sort