如何按文件大小对文本文件 .txt 的内容进行排序

如何按文件大小对文本文件 .txt 的内容进行排序

该文件是由生成的

ls -Raltr -block-size=M /* > /home/root/all_files.txt

我用 grep 尝试了几个命令,但没有成功。

答案1

最简单的方法是使用-Swith 来ls按大小对目录内容进行排序。文件仍然按目录分组,这可能不是您想要的:

ls -RaltrS --block-size=M /*

这种方法在这里可能不是一个选择;可能all_files.txt是旧文件或者是在另一台计算机上生成的。仍然可以按文件大小对文件名进行排序。对于典型的文件,由ls -Raltr --block-size=M(注意以两个连字符而不是一个连字符开头)生成的一行输出--block-size如下所示:

-rw-rw-r-- 1 owner group 1M Apr 16 05:37 file.txt

使用sortwith -h(对于人类可读的数字,例如 1M)和 with-k 5来指定文件大小位于文本的第五列(由空格分隔)中:

sort -k 5 -h /home/root/all_files.txt

ls -Raltr --block-size=M /*对存储的输出进行排序/home/root/all_files.txt可能会很混乱,因为有额外的行未列出文件大小,因此使用grepfirst 只获取您想要的行:

grep '^-' /home/root/all_files.txt | sort -k 5 -h

此处,grep '^-'丢弃不以连字符开头的行(例如,以dfor 目录或lfor 链接开头的行)。

此答案适用于 Xubuntu 16.04 上的 GNU 工具。尚未在 MacOS 或 BSD 系统上进行测试。

答案2

为了按大小对当前目录中或当前目录下的所有常规文件进行排序,shellzsh提供了方便的**通配模式,可以在路径名中进行匹配/(即“递归地向下进入子目录”)。它还允许排位赛一种模式,以便您仅获得常规文件的匹配项,并且结果根据这些文件的大小进行排序。

zshshell 中,这个模式看起来像

**/*(.OL)

这将返回所有.按相反 ( O) 大小顺序 ( ) 排序的常规文件 ( L)。

要仅获取文件列表,请使用

printf '%s\n' **/*(.OL)

要获得ls“长列表”输出,请使用

ls -fl **/*(.OL)

(该-f选项阻止ls自己对文件进行排序)。

如果zsh不是普通的 shell,您仍然可以使用这些命令,假设zsh您的系统上安装了:

zsh -c 'ls -fl **/*(.OL)'

--block-size=M如果您使用 GNU ,您显然也可以添加它ls

如果您只对前十个最大的文件感兴趣,请使用以下模式

**/*(.OL[1,10])

反而。

相关内容