
最小サイズのディレクトリですべてのファイルを見つける必要があります。
これまで私のコードは次のようになります。
#!/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 }
答え2
SMALLEST_FILE=$(ls -SrqL $dir | head -1)