du 명령을 파일 유형별로만 "필터링"하는 대신

du 명령을 파일 유형별로만 "필터링"하는 대신

다음 명령은 50개의 가장 큰 디렉터리를 나열합니다(재귀적으로 작동).

du --separate-dirs -hc  . | sort -hr | head -50

성능 관점에서 가장 좋은 접근 방식은 무엇입니까출력 형식을 동일하게 유지함수에 인수를 입력으로 전달하는 것도 가능합니다 myfunc doc docx xls xlsx ppt. 사용된 새로운 50개 디렉터리는 myfunc다음과 같이 위에서 아래로 나열되어야 합니다. 첫 번째 디렉터리는 가장 큰 디렉터리를 포함하는 디렉터리여야 합니다.조합 크기파일 수 - 이 목적에서는 나머지 파일 형식을 완전히 무시해야 합니다( 명령에 따라 각 디렉터리의 전체 크기를 표시하는 doc OR docx OR xls OR xlsx OR ppt대신 ).du

나는 여기에 (나에게 도움이 되지 않는) 매개변수가 du있다는 것을 알았고, 존재하지 않는 매개변수를 --exclude찾고 있는 것 같습니다 .--filter

find . \( -type f -name "*.doc" \) -o \( -type f -name "*.docx" \) -o \( -type f -name "*.xls" \)  -o \( -type f -name "*.xlsx" \)  -o \( -type f -name "*.ppt" \) -printf '%s\n' | awk '{s+=$0} END{print s+0}' | numfmt --to=iec --suffix=B --padding=7

내가 시도한 다른 방법 중 일부(위의 방법과 같은)는 다음보다 더 잘 작동하는 것 같습니다 du. 어떤 아이디어가 있습니까?

답변1

내 생각에는 세 가지 옵션이 있습니다.

  1. du를 필터로 다시 작성합니다. Perl의 File::Find가 시작하기에 좋은 곳일 수 있습니다.

  2. 선택한 파일만 표시하는 프록시 파일 시스템을 작성합니다. 회로 차단기를 구현하는 것이 좋은 시작일 수 있습니다. 실적이 좋지 않을 것으로 예상됩니다.

  3. 기존 du 구현을 수정합니다.

답변2

방금 여기서 설명한 내용을 재현하는 작은 프로젝트를 GitHub에 만들었습니다. 단일 출력을 사용 find하고 다른 모든 것을 구문 분석하여 완전히 최적화되었습니다 AWK. 기여를 환영합니다:

https://github.com/madjoe/wii

관련 정보