LoginSignup
2
0

More than 3 years have passed since last update.

ディレクトリに含まれるサイズの大きいファイルを検索(シェルスクリプト)

Last updated at Posted at 2018-02-14

こんにちは。
指定したディレクトリの下位に存在するサイズの大きいファイル(大きい順に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 $?
2
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
0