파일 수 및 누적 크기와 함께 하위 디렉터리를 포함한 디렉터리의 내용을 나열하는 방법이 있습니까?
보고 싶어요:
- 디렉토리 수
- 하위 디렉터리 수
- 파일 수
- 누적 크기
답변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
이 명령에 쉽게 액세스하려면 이를 함수로 변환하면 됩니다. 쉘의 초기화 파일( ~/.bashrc
bash의 경우)에 다음 행을 추가하십시오.
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개의 주요 부분으로 구성됩니다.
find /path/to/target -type d | while IFS= read -r dir; do ... ; done
: 아래의 모든 디렉터리를 찾고/path/to/target
이름에 변수를 설정하여 각 디렉터리를 처리합니다. 이름에 공백이 있는 디렉터리에서는 이것이 중단되지 않는지dir
확인하세요 .IFS=
echo -ne "$dir\tsize: $(du -sh "$dir" | cut -f 1)"
: 이 명령은du
디렉토리의 크기를 가져오고cut
첫 번째 필드만 인쇄하는 명령을 사용합니다du
.echo -ne "\tsubdirs: $(find "$dir" -mindepth 1 -type d | wc -l)"
: 이 find 명령은 파일이 아닌 디렉토리만 찾고$dir
현재 디렉토리는 계산하지 않도록 하세요 .type -d
-mindepth
.
echo -e "\tfiles: $(find "$dir" -maxdepth 1 -type f | wc -l)";
: 다음 파일을 찾습니다(-type f
).곧장(-maxdepth 1
) 아래에$dir
. 계산되지 않습니다$d
.| tac
: 드디어 모두 합격tac
이는 행의 인쇄 순서를 반대로 바꿉니다. 이는 대상 디렉터리의 전체 크기가 마지막 줄에 표시된다는 의미입니다. 원하는 내용이 아닌 경우 삭제하세요| tac
.