こんにちは。
指定したディレクトリの下位に存在するサイズの大きいファイル(大きい順にn
個のファイル)を表示させるシェルスクリプトを作ってみました。検索のために find コマンドを使っています。
$ ./find_large_files.sh -n2 .
122G .
-rw-r--r--@ 1 kkdd staff 4.2G 11 12 2017 Win10_1711_Japanese_x64.iso
-rw-r--r--@ 1 kkdd staff 4.0G 10 29 2016 old/Win10_1607_Japanese_x64.iso
ただしディレクトリ直下(深さ1だけ)を対象にするならば、ls -S
を使うだけで良いと思います。
$ (cd . ; ls -lhS | tail -n +2 | head -n 2 )
-rw-r--r--@ 1 kkdd staff 4.2G 11 12 2017 Win10_1711_Japanese_x64.iso
-rw-r--r--@ 1 kkdd staff 4.0G 10 29 2016 old/Win10_1607_Japanese_x64.iso
find_large_files.sh
#!/bin/sh
### default value
nmax=4
while [ $# -gt 0 ]
do
case "$1" in
-n* )
nmax="$(echo "$1" | sed 's/^-n//')"
shift 1
;;
esac
done
for dir in "$@"; do
du -sh "$dir"
siz=$((1024*1024*1024)) # = 2**30 = 1GB
cd "$dir" || exit
while :
do
findfiles=$(find . -size "+${siz}c")
nfiles=$(echo "$findfiles" | wc -l)
[ -n "$findfiles" ] && [ "$nfiles" -ge "$nmax" ] && break
[ $siz -eq 1 ] && break
siz=$((siz / 2))
done
[ -n "$findfiles" ] && echo "$findfiles" | tr '\n' '\0' | xargs -0 ls -ldhS | head -n "$nmax" | sed -e 's/\ \.\//\ /'
cd - >/dev/null 2>&1 || exit
done
exit $?