![인간 친화적인 파일 크기를 변수에 저장하는 방법은 무엇입니까?](https://linux55.com/image/121990/%EC%9D%B8%EA%B0%84%20%EC%B9%9C%ED%99%94%EC%A0%81%EC%9D%B8%20%ED%8C%8C%EC%9D%BC%20%ED%81%AC%EA%B8%B0%EB%A5%BC%20%EB%B3%80%EC%88%98%EC%97%90%20%EC%A0%80%EC%9E%A5%ED%95%98%EB%8A%94%20%EB%B0%A9%EB%B2%95%EC%9D%80%20%EB%AC%B4%EC%97%87%EC%9E%85%EB%8B%88%EA%B9%8C%3F.png)
기본적으로 내가 원하는 것은 크기가 임계값(내 경우에는 2.2GB)을 초과하는 디렉터리의 모든 파일을 크기와 함께 출력하는 스크립트를 만드는 것입니다. 다음과 같이 stat 명령을 사용해 보았습니다.
a=$(stat -c '%s' example.txt)
그러나 이것은 파일 크기를 바이트 단위로 저장합니다. 내가 원하는 것은 사람이 읽을 수 있는 형식(MB, GB)으로 크기를 저장하고 표시하는 것입니다. 출력물을 저장 ls -lah
한 후 이름과 크기만 저장되도록 결과를 다듬는 것도 고려했지만 이 작업이 지루한 작업인 것 같습니다. 결과를 바이트 단위로 저장한 다음 이에 대해 산술을 수행하는 것 외에 다른 방법이 있습니까?
답변1
이미 GNU 도구를 사용하고 있으므로 numfmt
GNU coreutils를 참조하세요.
$ stat -c %s file
310776
$ stat -c '%s' file | numfmt --to=si
311K
$ stat -c '%s' file | numfmt --to=iec
304K
$ stat -c '%s' file | numfmt --to=iec-i
304Ki
$ stat -c '%s' file | numfmt --to=si --suffix=B
311KB
그리고 ksh93
:
$ size=$(stat -c %s file)
$ printf "%#d %#i\n" "$size" "$size"
311k 304Ki
또는 ls
내장 함수를 사용하여 빌드한 경우( 또한완전 개방팩):
$ type ls
ls is a shell builtin version of /opt/ast/bin/ls
$ ls -Z '%#(size)d %#(size)i' file
311k 304Ki
답변2
스크립트가 필요하지 않습니다 du -d 0 -t 2200M -h /some/dir/name/*
. .
예. du
모든 파일을 표시 하는 데 사용됩니다 ./쓰레기통보다 낫다500000:
du -d 0 -t 500K -h /bin/*
산출:
1.1M /bin/bash
620K /bin/btrfs
2.0M /bin/busybox
1.6M /bin/ksh93
788K /bin/zsh
sort
-h
위의 항목을 크기별로 정렬하는 무료 서비스가 있습니다 .
du -d 0 -t 500K -h /bin/* | sort -h
산출:
620K /bin/btrfs
788K /bin/zsh
1.1M /bin/bash
1.6M /bin/ksh93
2.0M /bin/busybox
답변3
착한 사람여기당신에게 도움이 될 수 있는 해결책을 생각해냈습니다:
find . -type f -size +2G -exec ls -sh {} \; 2> /dev/null
사람이 읽을 수 있는 형식으로 완벽하게 정렬된 완전한 경로 이름과 크기를 제공합니다.
네가 원한다면2.2G그러면 find
소수를 처리할 수 없으므로 수학을 좀 해야 하고(2048 + 205 =) 2253M
find . -type f -size +2253M -exec ls -sh {} \; 2> /dev/null
매개변수를 사용하여 검색 깊이와 필요한 크기를 제한하고 find
( 참조 man find
) awk
열을 파일이나 배열로 출력하는 데 사용할 수 있습니다.
편집: -lh를 -sh로 변경하고 @Olorin 개선 사항에 따라 awk를 제거했습니다.
답변4
du -h example.txt|cut -f 1
( -h
=사람이 읽을 수 있는)
이것은 가정한다당신의"인간의 가독성"이라는 아이디어와뒤컨셉의 취지는 같습니다.