我需要找到目录中最小大小的所有文件。
到目前为止我的代码:
#!/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)