THEGreatGatsby Asked: 2019-07-17 06:49:29 +0800 CST2019-07-17 06:49:29 +0800 CST 2019-07-17 06:49:29 +0800 CST 如何按文件大小对文本文件 .txt 的内容进行排序 772 该文件由 ls -Raltr -block-size=M /* > /home/root/all_files.txt 我用 grep 尝试了几个命令无济于事。 grep ls 2 个回答 Voted Best Answer Gaultheria 2019-07-17T07:47:24+08:002019-07-17T07:47:24+08:00 最简单的方法是使用-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.txtgrep grep '^-' /home/root/all_files.txt | sort -k 5 -h 在这里,grep '^-'丢弃不以连字符开头的行(例如,以dfor directory 或lfor link 开头的行)。 这个答案适用于 Xubuntu 16.04 上的 GNU 工具。它尚未在 MacOS 或 BSD 系统上进行测试。 Kusalananda 2019-07-19T13:14:30+08:002019-07-19T13:14:30+08:00 要按大小对当前目录中或当前目录下的所有常规文件进行排序,zshshell 提供了在路径名**中匹配的方便的通配模式/(即“递归向下进入子目录)。它还允许限定模式,以便您仅获得匹配项常规文件,并且根据这些文件的大小对结果进行排序。 在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]) 反而。
最简单的方法是使用
-S
withls
,按大小对目录内容进行排序。文件仍按目录分组,这可能不是您想要的:这种方法在这里可能不是一种选择;可能
all_files.txt
是旧文件或在另一台计算机上生成。仍然可以按文件大小对文件名进行排序。对于一个典型的文件,由ls -Raltr --block-size=M
(注意--block-size
以两个连字符而不是一个连字符开头)产生的一行输出如下所示:使用
sort
with-h
(用于人类可读的数字,例如 1M),并使用 with-k 5
指定文件大小在文本的第五列(由空格分隔)中:由于没有列出文件大小的额外行,对
ls -Raltr --block-size=M /*
存储的输出进行排序可能会很混乱,因此首先使用仅获取所需的行:/home/root/all_files.txt
grep
在这里,
grep '^-'
丢弃不以连字符开头的行(例如,以d
for directory 或l
for link 开头的行)。这个答案适用于 Xubuntu 16.04 上的 GNU 工具。它尚未在 MacOS 或 BSD 系统上进行测试。
要按大小对当前目录中或当前目录下的所有常规文件进行排序,
zsh
shell 提供了在路径名**
中匹配的方便的通配模式/
(即“递归向下进入子目录)。它还允许限定模式,以便您仅获得匹配项常规文件,并且根据这些文件的大小对结果进行排序。在
zsh
shell 中,这种模式看起来像.
这将返回以反向 (O
) 大小顺序 ( ) 排序的所有常规文件 (L
)。要获取仅文件的列表,请使用
要获得
ls
“长列表”输出,请使用(该
-f
选项阻止ls
对文件进行自己的排序)。如果
zsh
不是你的普通 shell,你仍然可以使用这些命令,假设zsh
你的系统上安装了:--block-size=M
如果您使用的是 GNU ,您显然也可以添加它ls
。如果您只对十个最大的文件感兴趣,请使用该模式
反而。