설명된 명령에서 MB, GB 또는 TB 단위의 크기와 파일 크기의 개수/합계 및 총 파일 수를 추가하는 방법

설명된 명령에서 MB, GB 또는 TB 단위의 크기와 파일 크기의 개수/합계 및 총 파일 수를 추가하는 방법

설명된 명령에 MB, GB 또는 TB 단위의 총 파일 크기와 파일 수/합계를 추가하는 방법

find . -maxdepth 1 -type d -print0 |
  sort -z |
  while IFS= read -r -d '' i; do
    echo -n "$i: "
    echo
    (
      find "$i" -type f |
        sed -n 's/..*\.//p'|
        sort |
        uniq -c
    )
    echo
  done

내가 가진 것:

.:
1 csv
2 docx
3 xlxs

./dir1:
  1csv
./dir2:
 1 docx
 2 xlsx

./dir3/:
 1 docx
 1 xlsx

나는 필요하다:

.:
1MB 1 csv
2MB 2 docx
3GB 3 xlxs
total 3.3 GB and 6 files

./dir1:
1MB  1csv
total 1MB and 1 file

./dir2:
1MB 1 docx
2GB 2 xlsx
total 1.1 GB and 2 files

./dir3/:
1MB 1 docx
3GB 1 xlsx
total 3.1 GB and 2 files

아니면 이 명령을 실행하는 더 좋은 방법이 있다면 감사하겠습니다. 감사합니다.

답변1

$ find . -maxdepth 1 -type d -print0 | sort -z | while IFS= read -r -d '' i ; do echo -n "$i: " ; echo ; list=$(find "$i" -type f  | sed -n 's/..*\.//p'| sort | uniq -c); ; echo "Total $(du -sh $i | cut -f -1| tr -d '\n') and $(x=0; for i in $list; do y=$(cut -f -1 <<< $i); x=$(($x+$y)); done; echo $x) files"; done

이 기능이 수행하지 않는 유일한 작업은 각 파일 형식의 크기 합계를 찾는 것입니다. 이렇게 하려면 echo $list다음 대신 다음을 수행해야 합니다.

for x in $list; ext=$(cut -d' ' -f2 << $x); do du -sch ${i}/*.${ext} | tail -n1 | cut -f -1; echo $x; done

확장자를 추출하기 위한 cut 명령을 얻을 수 없지만 $list루프와 형식을 조정하는 문제일 뿐이라고 생각합니다.$x

관련 정보