답변:
ls
(실제로 나쁜 연습 †로 간주되는) 출력을 구문 분석하는 대신 다음 find
과 du
같이 사용할 수 있습니다 .
-type f
현재 디렉토리 및 ≥1M ( -size +1M
) 크기의 하위 디렉토리에서 모든 파일 ( ) 을 찾아서 크기 의 합계를 얻으려면 다음을 수행하십시오.
find . -type f -size +1M -print0 | du -sch --files0-from=- | tail -1
유사하지만 하위 디렉토리 ( -maxdepth 1
) 에서 재귀하지 않습니다 .
find . -maxdepth 1 -type f -size +1M -print0 | du -sch --files0-from=- | tail -1
크기가 ≤1M 인 파일의 경우 :
find . -type f -size -1M -print0 | du -sch --files0-from=- | tail -1
find . -maxdepth 1 -type f -size -1M -print0 | du -sch --files0-from=- | tail -1
du
지원 버전이 --files0-from
옵션을 제공하면 작동 합니다 . 그렇지 않은 경우 다음을 시도하십시오.
find . -type f -size +1M -exec du -sch {} + | tail -1
그러나 파일이 너무 많으면 작동하지 않습니다 (답이 틀립니다). 이 경우 대신 시도해보십시오.
find . -type f -size +1M -exec sh -c 'du -sch "$@" | tail -1' _ {} +
그런 다음 몇 줄 (너무 많지 않은 줄)을 갖게되고 직접 수학을해야합니다.
함께 find
하면 당신이 고려해야 할 어떤 파일에 완벽하게 제어 할 수 있습니다! 필터링 가능성은 대부분 끝이 없습니다.
건배!
†ls -1h | grep 'M '
문자열이 포함 된 파일이 있으면 틀린 답을 얻게됩니다 "M "
. 그리고 그 결과는 ls
기계가 아닌 인간이 읽을 수 있습니다. 기계에는 이런 종류의 정보를 얻을 수있는 훨씬 더 좋은 방법이 있습니다.
이것은 나를 위해 일했습니다.
ls -lh | grep 'M' | awk '{ SUM += $5} END {print SUM}'
ls -l
출력 의 다섯 번째 필드입니다 . (파일 크기는 어느 것입니까). 구문 분석 ls 출력은 잘못된 형식으로 간주되며 변경되면 중단됩니다. find -ls를 사용하는 것도 동일하며 더 나은 솔루션으로 간주됩니다. 하위 디렉토리를 사용하는 동안 -type f와 결합 할 수 있습니다.