如何按文件大小对查找命令的结果进行排序,并显示文件大小(以MB为单位)?

时间:2015-07-29 13:50:09

标签: bash sorting grep find xargs

作为一个辅助问题,知道如何使输出看起来整洁也很好(bash是否有某种形式的字符串格式?)无论如何,我有一个发现。命令返回超过一定大小的所有文件,我想按降序对这些结果进行排序,并将它们传递给邮件程序。我有邮件部分,但我不知道如何对它们进行排序并以有条理的方式显示文件大小。谢谢你的帮助!

1 个答案:

答案 0 :(得分:0)

这将找到所有文件> 1000字节并打印出文件名和大小(以字节为单位):

$ find tmp/ -size +1000c -printf '%p %s\n' | sort -k2 -n

这会给你输出像:

tmp/gitwork/integration/.git/hooks/pre-rebase.sample 4951
tmp/gitwork/repo1/.git/hooks/pre-rebase.sample 4951
tmp/gitwork/repo2/.git/hooks/pre-rebase.sample 4951
tmp/gitwork/upstream1/hooks/pre-rebase.sample 4951
tmp/gitwork/upstream2/hooks/pre-rebase.sample 4951
tmp/constraints.dot 7035
tmp/constraints.svg 41657
tmp/so31567373/KBFI.xml 375557
tmp/overflow.tar 399360

如果你想做这个"漂亮",你可以为printf指令添加一些字段宽度说明符:

$ find tmp/ -size +1000c -printf '%-60p %s\n' | sort -k2 -n

哪能得到你:

tmp/gitwork/integration/.git/hooks/pre-rebase.sample         4951
tmp/gitwork/repo1/.git/hooks/pre-rebase.sample               4951
tmp/gitwork/repo2/.git/hooks/pre-rebase.sample               4951
tmp/gitwork/upstream1/hooks/pre-rebase.sample                4951
tmp/gitwork/upstream2/hooks/pre-rebase.sample                4951
tmp/constraints.dot                                          7035
tmp/constraints.svg                                          41657
tmp/so31567373/KBFI.xml                                      375557
tmp/overflow.tar                                             399360

如果您对"漂亮"的定义需要更复杂的东西,你可能想通过awk调查输出管道。