Bash - 按名称和大小列出和排序文件及其大小

时间:2012-03-18 00:43:48

标签: bash sorting size


我试图找出如何按名称和大小排序文件列表。
如何使用“ du -a ”按文件名和大小排序而不显示目录?

使用“ 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

如何列出所有没有目录的文件,添加文件大小,先按文件名排序,然后按大小排序?

感谢您的帮助

3 个答案:

答案 0 :(得分:18)

您可以使用:

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

说明:

  • -type f仅查找文件
  • -printf以特定格式打印输出:
    • %f打印文件名
    • %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
....

希望这有帮助

答案 1 :(得分:8)

您可以使用sort命令

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

按第二个字段(名称)排序,然后按数字排序第一个字段(大小)。

答案 2 :(得分:1)

正如其他答案到目前为止所说,这不是一个真正的重击问题。

du几乎坚持要告诉你有关目录的信息:如果你把它指向一个目录,那么无论有没有-a它都会告诉你它。

如果你有GNU du,你可以告诉它从stdin读取一个NUL终止的文件名列表,这样你就可以使用find来生成列表:{{1 (这里你不需要find ... -print0 | du --files0-from=-标志)。 (如果您没有-a选项,仍然可以使用--files0-from相对有效地调用du;请参阅xargs文档。)

如果你有GNU xargs,你可能有GNU du,其中find由@ icyrock.com描述。只是使用它。然后使用明确的-printf