ディレクトリ内の最小のファイルを見つける方法

ディレクトリ内の最小のファイルを見つける方法

最小サイズのディレクトリですべてのファイルを見つける必要があります。

これまで私のコードは次のようになります。

#!/bin/bash
dir="$1"
   printf "minimum file size: %s\n"
            du $dir -hab | sort -n -r |tail 

このコードは最小のファイルを表示しますが、最小のファイルサイズを自動的に表示する必要があります。

私の結果:

file size:
15  testdir/subdir3/subdir4/file3.txt
15  testdir/subdir1/file5.txt

実際の出力は次のようになります。

file size: 15
        testdir/subdir3/subdir4/file3.txt
        testdir/subdir1/file5.txt

ベストアンサー1

たぶん、次のようなものがあります。

find /some/dir -maxdepth 1 -type f -printf '%s\t%p\n' | \
    sort -n | \
    awk '
        NR == 1 { s = $1 }
        $1 != s { exit }
        1'

(GNU仮定find(1))。

編集する:この部分の仕組みawk

  • awk最小のファイルがリストの先頭にグループ化されるようにソートされた行の<size><tab><filename>リストを受け取ります。<size>
  • NR == 1最初の行にのみ適用され、s最小ファイルの共通サイズに初期化されます。
  • $1 != sより大きいサイズのファイルを見つけるときに適用されますs。リストはサイズ別にソートされているため、すべての後続のファイルは少なくともそのサイズ以上であるため、次のようにできます。
  • に達すると1ルールが$1 != s一致しないため、ファイルサイズが正確なので印刷sします。1{ print }

おすすめ記事