기본적으로 파일을 찾은 다음 크기별로 정렬합니다. 사람이 읽을 수 있는 크기로 크기를 정렬하지 않으면 스크립트가 작동합니다. 하지만 저는 사람이 읽을 수 있는 크기를 원합니다. 사람이 읽을 수 있는 크기를 정렬하는 방법은 무엇입니까?
예를 들어:
ls -l | sort -k 5 -n | awk '{print $9 " " $5}'
이것은 예상대로 작동하며 내 파일 크기는 오름차순 바이트 순서입니다.
1.txt 1
test.txt 3
bash.sh* 573
DocGeneration.txt 1131
andres_stuff.txt 1465
Branches.xlsx 15087
foo 23735
bar 60566
2016_stuff.pdf 996850
이제 사람이 읽을 수 있는 크기를 원하므로 ls에 -h 매개변수를 추가했는데 이제 일부 파일의 순서가 잘못되었습니다.
ls -lh | sort -k 5 -n | awk '{print $9 " " $5}'
1.txt 1
DocGeneration.txt 1.2K
andres_stuff.txt 1.5K
test.txt 3
Branches.xlsx 15K
foo 24K
bar 60K
bash.sh* 573
2016_stuff.pdf 974K
답변1
노력하다sort -h k2
-h, --human-numeric-sort 사람이 읽을 수 있는 숫자를 비교합니다(예: 2K 1G)
Gnu 정렬, BSD 정렬 등의 일부입니다.
답변2
ls
이 기능은 내장되어 있습니다. 이 -S
옵션을 사용하여 역순으로 정렬하세요.ls -lShr
-r, --reverse
reverse order while sorting
-S sort by file size, largest first
답변3
특정 쉘이 언급되지 않았으므로 zsh
쉘에서 모든 작업이 수행되는 방법은 다음과 같습니다.
ls -lhf **/*(.Lk-1024oL)
glob 패턴은 pathname 에서 와 **
유사하게 *
일치합니다 /
. 즉, 재귀 검색과 같습니다.
이 ls
명령은 사람이 읽을 수 있는 크기를 활성화 -h
하고 긴 목록 출력 형식을 활성화합니다 -l
. 이 -f
옵션은 정렬을 비활성화하므로 ls
파일은 지정된 순서대로만 나열됩니다.
**/*(.Lk-1024oL)
이 순서는 작은 파일이 먼저 나열되도록 파일 이름 와일드카드 패턴으로 정렬됩니다 . 이 **/*
비트는 이 디렉터리와 그 아래 디렉터리에 있는 모든 파일과 디렉터리와 일치하지만 (...)
glob의 동작을 수정합니다("glob 한정자"입니다).
oL
마지막( )은 o
파일 크기("길이")를 기준으로 이름을 정렬합니다.L
접두어를 사용 .
하면 glob이 일반 파일(디렉토리 없음)만 일치하게 됩니다.
이 Lk-1024
비트는 크기가 1024KB 미만인 파일을 선택합니다("1024KB 미만의 길이").
zsh
이것이 기본 대화형 쉘이 아닌 경우 다음을 사용할 수 있습니다.
zsh -c 'ls -lf **/*(.Lk-1024oL)'
setopt GLOB_DOTS
숨겨진 이름은 (또는 )을 사용하여 zsh -o GLOB_DOTS -c ...
일치시킬 수도 있습니다 . ...또는 그냥 D
glob 한정자 문자열에 추가하세요.
numfmt
위 내용을 확장하여 경로 이름과 사람이 읽을 수 있는 크기가 포함된 2열 출력을 원하고 GNU coreutils의 출력 도 있다고 가정하면 ,
zmodload -F zsh/stat b:zstat
for pathname in **/*(.Lk-1024oL); do
printf '%s\t%s\n' "$pathname" "$(zstat +size "$pathname" | numfmt --to=iec)"
done
아니면 더 빠르게,
paste <( printf '%s\n' **/*(.Lk-1024oL) ) \
<( zstat -N +size **/*(.Lk-1024oL) | numfmt --to=iec )
답변4
이것이 작동할까요?
ls -l | awk '{if ($5<=1024) {print}}' | sort -k 5 -n | awk '{print $9"\t"substr($5/1024,1,3)"k"} '| column -t
첫 번째 awk
exp는 1M보다 작은 파일을 찾고, 두 번째 exp는 결과에서 바이트 크기를 가져와 이를 KB로 변환하고 처음 3개 요소를 인쇄하여 사람이 읽을 수 있는 크기를 제공합니다.