如何找到目录中最小的文件

如何找到目录中最小的文件

我需要找到目录中最小大小的所有文件。

到目前为止我的代码:

#!/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不匹配,因此文件的大小正好是s1相当于{ print },所以我们打印它。

答案2

SMALLEST_FILE=$(ls -SrqL $dir | head -1)

相关内容