파일 수 및 누적 크기와 함께 디렉터리(하위 디렉터리 포함) 나열

파일 수 및 누적 크기와 함께 디렉터리(하위 디렉터리 포함) 나열

파일 수 및 누적 크기와 함께 하위 디렉터리를 포함한 디렉터리의 내용을 나열하는 방법이 있습니까?

보고 싶어요:

  • 디렉토리 수
  • 하위 디렉터리 수
  • 파일 수
  • 누적 크기

답변1

내가 올바르게 이해하면 원하는 것을 얻을 수 있습니다.

find /path/to/target -type d | while IFS= read -r dir; do 
  echo -ne "$dir\tsize: $(du -sh "$dir" | cut -f 1)" 
  echo -ne "\tsubdirs: $(find "$dir" -mindepth 1 -type d | wc -l)"
  echo -e "\tfiles: $(find "$dir" -type f | wc -l )";
done  | tac

예를 들어 실행하면 /boot다음과 같은 출력이 표시됩니다.

/boot/burg/themes/sora_extended size: 8.0K  subdirs: 0  files: 1
/boot/burg/themes/radiance/images   size: 196K  subdirs: 0  files: 48
/boot/burg/themes/radiance  size: 772K  subdirs: 1  files: 53
/boot/burg/themes/winter    size: 808K  subdirs: 0  files: 35
/boot/burg/themes/icons size: 712K  subdirs: 0  files: 76
/boot/burg/themes   size: 8.9M  subdirs: 26 files: 440
/boot/burg/fonts    size: 7.1M  subdirs: 0  files: 74
/boot/burg  size: 20M   subdirs: 29 files: 733
/boot/grub/locale   size: 652K  subdirs: 0  files: 17
/boot/grub  size: 4.6M  subdirs: 1  files: 224
/boot/extlinux/themes/debian-wheezy/extlinux    size: 732K  subdirs: 0  files: 11
/boot/extlinux/themes/debian-wheezy size: 1.5M  subdirs: 1  files: 22
/boot/extlinux/themes   size: 1.5M  subdirs: 2  files: 22
/boot/extlinux  size: 1.6M  subdirs: 3  files: 28
/boot/  size: 122M  subdirs: 36 files: 1004

이 명령에 쉽게 액세스하려면 이를 함수로 변환하면 됩니다. 쉘의 초기화 파일( ~/.bashrcbash의 경우)에 다음 행을 추가하십시오.

dirsize(){
    find "$1" -type d | while IFS= read -r dir; do 
    echo -ne "$dir\tsize: $(du -sh "$dir"| cut -f 1)" 
    echo -ne "\tsubdirs: $(find "$dir" -mindepth 1 -type d | wc -l)"
    echo -e "\tfiles: $(find "$dir" -maxdepth 1 -type f | wc -l )";
    done  | tac
}

이제 다음과 같이 실행할 수 있습니다 dirsize /path/.


설명하다

위의 함수는 5개의 주요 부분으로 구성됩니다.

  1. find /path/to/target -type d | while IFS= read -r dir; do ... ; done: 아래의 모든 디렉터리를 찾고 /path/to/target이름에 변수를 설정하여 각 디렉터리를 처리합니다. 이름에 공백이 있는 디렉터리에서는 이것이 중단되지 않는지 dir확인하세요 .IFS=

  2. echo -ne "$dir\tsize: $(du -sh "$dir" | cut -f 1)": 이 명령은 du디렉토리의 크기를 가져오고 cut첫 번째 필드만 인쇄하는 명령을 사용합니다 du.

  3. echo -ne "\tsubdirs: $(find "$dir" -mindepth 1 -type d | wc -l)": 이 find 명령은 파일이 아닌 디렉토리만 찾고 $dir현재 디렉토리는 계산하지 않도록 하세요 .type -d-mindepth.

  4. echo -e "\tfiles: $(find "$dir" -maxdepth 1 -type f | wc -l)";: 다음 파일을 찾습니다( -type f).곧장( -maxdepth 1) 아래에 $dir. 계산되지 않습니다 $d.

  5. | tac: 드디어 모두 합격tac이는 행의 인쇄 순서를 반대로 바꿉니다. 이는 대상 디렉터리의 전체 크기가 마지막 줄에 표시된다는 의미입니다. 원하는 내용이 아닌 경우 삭제하세요 | tac.

관련 정보