在管理 Linux 系统时,我经常发现自己在分区变满后很难找到罪魁祸首。我通常使用du / | sort -nr但在大型文件系统上这需要很长时间才能返回任何结果。
此外,这通常可以成功地突出显示最严重的罪犯,但我经常发现自己
在更微妙的情况下诉诸于du没有sort,然后不得不浏览输出。
我更喜欢依赖于标准 Linux 命令的命令行解决方案,因为我必须管理相当多的系统并且安装新软件很麻烦(尤其是在磁盘空间不足时!)
是否有标准工具可以将字节的整数计数转换为人类可读的最大可能单位大小计数,同时将数值保持在 1.00 和 1023.99 之间?
我有我自己的 bash/awk 脚本,但我正在寻找一个标准工具,它可以在许多/大多数发行版中找到......更普遍可用的东西,理想情况下有简单的命令行参数,和/或可以接受管道输入。
以下是我正在寻找的输出类型的一些示例。
1 Byt
173.00 KiB
46.57 MiB
1.84 GiB
29.23 GiB
265.72 GiB
1.63 TiB
Run Code Online (Sandbox Code Playgroud)
这是bytes-human脚本(用于上述输出)
awk -v pfix="$1" -v sfix="$2" 'BEGIN {
split( "Byt KiB MiB GiB TiB PiB", unit )
uix = uct = length( unit )
for( i=1; i<=uct; i++ ) val[i] = (2**(10*(i-1)))-1
}{ if( int($1) == 0 ) uix = 1; else while( $1 < val[uix]+1 ) uix--
num = $1 …Run Code Online (Sandbox Code Playgroud) 我正在使用此命令来确定哪个目录正在占用我的磁盘。
du -sk * | sort -n
Run Code Online (Sandbox Code Playgroud)
如何获得人类可读du的文件大小结果表?我已经检查过man,它所拥有的只是-k将字节结果转换为千字节结果的标志。我需要千兆字节的结果
我正在编写一个简单的辅助函数,以我想要的格式显示特定文件夹:
find . -maxdepth 1 -not -name "." -printf '[%TY-%Tm-%Td]\t%s\t%f\n' | sort -n
Run Code Online (Sandbox Code Playgroud)
但是我想以更好的格式显示文件大小。我找到了这个答案,我用它来创建一个名为 .bash 的 bash 函数hr。
user@host:~$ hr 12345
12M
Run Code Online (Sandbox Code Playgroud)
我尝试在find通话中使用它,如下所示:
find . -maxdepth 1 -not -name "." -printf '[%TY-%Tm-%Td]\t'$(hr %s)'\t%f\n' | sort -n
Run Code Online (Sandbox Code Playgroud)
但它仍然继续显示完整的文件大小。我应该如何修改它以使其按预期工作?
可能重复:
如何按大小对 du 输出进行排序?
我有一个从输出生成的文本文件
du --max-depth 1 -h > sizeOfHomeFolder.txt
Run Code Online (Sandbox Code Playgroud)
它的内容是这样的格式:
$ cat sizeOfHomeFolder.txt | head
776K ./Expensemanager
8.0K ./workspace
4.0M ./mysql-tutorial
3.6M ./temp
26M ./Desktop
4.0K ./Ubuntu One
4.0K ./Photos
4.0K ./Public
Run Code Online (Sandbox Code Playgroud)
我需要根据第一列即大小对这个文件进行排序。
如何使用sort或sed或任何其他常见的 Unix 实用程序执行此操作?