최소 크기의 디렉터리에서 모든 파일을 찾아야 합니다.
지금까지 내 코드는 다음과 같습니다.
#!/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)