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

问题描述 投票:0回答:5


我想弄清楚如何按名称和大小对文件列表进行排序。
如何使用“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

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

感谢您的帮助

bash sorting size
5个回答
19
投票

您可以使用这个:

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

说明:

  • -键入 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
....

希望这有帮助


9
投票

您可以使用

sort
命令

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

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


1
投票

正如到目前为止的其他答案所说,这并不是真正的 bash 问题。

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

如果您有 GNU

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

如果您有 GNU

du
,那么您可能有 GNU
find
,它具有 @icyrock.com 所描述的
-printf
。 就用那个吧。 然后使用显式的
sort


0
投票
$ stat --printf='%s %n\n' * | sort -k2,2 -k1n

使用 stat 获取文件大小(%s)和名称(%n),并将其通过管道进行排序,按名称和大小顺序对其进行排序。


0
投票

我丢失了该页面,但有人给了我一行非常好的代码,让我在 .bat 文件中尝试 抱歉,我丢失了该页面,而且我现在太忙了,无法查找(更多)它,但我 会的 - 谢谢!

对于 ("DIR-NAME") 中的 %%f 执行 echo %%f %%~zf

我的更改 = [for %%f in ("*.mp4") do echo %%f -------- %%~zf]

谢谢(我会更加努力地给予应有的信用......)现在我 仍然有一个“排序”问题要面对。

© www.soinside.com 2019 - 2024. All rights reserved.