디렉토리에서 가장 작은 파일을 찾는 방법

디렉토리에서 가장 작은 파일을 찾는 방법

최소 크기의 디렉터리에서 모든 파일을 찾아야 합니다.

지금까지 내 코드는 다음과 같습니다.

#!/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)

관련 정보