Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Bash-按名称和大小列出和排序文件及其大小_Bash_Sorting_Size - Fatal编程技术网

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

Bash-按名称和大小列出和排序文件及其大小,bash,sorting,size,Bash,Sorting,Size,我正在尝试找出如何按名称和大小对文件列表进行排序。 如何使用“du-a”按文件名和大小排序而不显示目录? 使用“du-a” 如何列出没有目录的所有文件,添加文件大小,并首先按文件名排序,然后按大小排序 感谢您的帮助您可以使用: find -type f -printf "%f %s %p\n"|sort 说明: -键入f仅查找文件 -printf以特定格式打印输出: %f打印文件名 %s打印文件大小 %p打印整个文件名(即,使用前导文件夹)-如果需要,可以省略此项 然后运行排序,


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

使用“du-a

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

感谢您的帮助

您可以使用:

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

  • -键入f仅查找文件
  • -printf以特定格式打印输出:
    • %f打印文件名
    • %s打印文件大小
    • %p打印整个文件名(即,使用前导文件夹)-如果需要,可以省略此项
然后运行排序,按照上面给出的顺序排序(即文件名、文件大小、文件路径)。输出如下(显示的部分输出):


希望这有帮助

您可以使用
排序
命令

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

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

正如其他答案所说,这实际上不是bash问题

du
坚持告诉你关于目录的事情:如果你把它指向一个目录,那么无论有没有
-a
它都会告诉你关于它的事情

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


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

谢谢!这正是我所需要的。极好的回答也帮助了我。非常感谢。谢谢@Tastybrownies-很高兴它能帮上忙!要按文件名排序吗?或者路径?请注意,
-printf
方法也需要这些
排序
选项(经过必要的修改)。然后,您可能还希望删除字段,例如,使用
cut
或类似的方法。您可以
--max depth=1
du
仅限于当前文件夹,但它仍会列出文件夹,而不会列出其内容。
...
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
....
$ find -type f -printf $'%s\t%f\n' | sort -k2,2 -k1,1n