#!/bin/bash
################# ls-by-min ################
## List By Min File Size ##
## Copyright (c) 2020 Theodore R. Smith ##
## License: MIT ##
if [ -z "$1" ]; then
echo "Error: You must specify a minimum file size (in MB)."
exit 1
fi
FILE_SIZE=$1
if [ "$2" = "-r" ]; then
MAXDEPTH=512
else
MAXDEPTH=1
fi
find . -maxdepth ${MAXDEPTH} -type f -size "+${FILE_SIZE}M" -exec du -sm {} \; | sort -rnk1 | sed 's/^[0-9]\+\t*//g'
6条答案
按热度按时间eblbsuwk1#
下面是如何使用
find
命令**:下面是如何使用递归
ls
命令**:或者,如果您只想显示文件名:
ep6jt1vc2#
解析
ls
或其变体将增加不确定的复杂性。按文件大小排序文件路径:
备注:
sort -n
更改为sort -nr
以获得相反的顺序-print0
,但照顾文件名包含换行符似乎迂腐。%p
更改为%P
将得到src/
下的相对路径nhaq1z213#
大小以MiB为单位,路径是相对的。
juud5qan4#
我用的不是
-exec ... \;
,而是-exec ... {} +
。这个构造并不提取找到的每个文件,而是等待所有文件都被找到,然后将它们作为一个大的参数列表放到一个命令(这次是-ls
)中。然后ls
正在查看文件,因为键-S
按大小排序,最大的优先。ruarlubt5#
find -type f
递归查找当前目录下的所有文件-printf '%s %p\n'
:对于每个文件,它打印文件大小(以字节为单位)和文件名(以空格分隔),并带有换行符numfmt --to=iec
将第一个字段(文件大小)格式化为人类可读格式(带有K、M、G后缀),并保持文件名不变sort -hr
按数字顺序对所有行进行排序,理解人类可读的后缀bejyjqdl6#
从字面上看,这些答案实际上都不起作用。
这是我做的
https://github.com/hopeseekr/BashScripts/blob/master/ls-by-min
你可以通过执行以下操作来运行它:
并且它将按从大到小的顺序列出当前目录中100 MB或更大的文件。传入
-r
以使其递归。