시스템에서 모든 inode 사용량이 어디에 있는지 알아내기 위해 하위 디렉터리에 파일이 몇 개 있는지 확인하고 싶습니다. 공간 활용을 위해 이렇게 한 것 같아요.
du -sh /*
이렇게 하면 루트 디렉터리 외부의 디렉터리에서 사용되는 공간이 제공되지만 이 경우에는 크기가 아닌 파일 수가 필요합니다.
답변1
find . -maxdepth 1 -type d | while read -r dir
do printf "%s:\t" "$dir"; find "$dir" -type f | wc -l; done
보안/호환성 수정을 위해 Gilles와 xenoterracide에게 감사드립니다.
첫 번째 부분은 find . -maxdepth 1 -type d
현재 작업 디렉터리의 모든 디렉터리 목록을 반환합니다. (경고: -maxdepth
GNU 확장이며 GNU가 아닌 버전에는 없을 수도 있습니다 find
.) 이것은 다음으로 파이프됩니다...
파트 2: ( while read -r dir; do
위에 표시된 while read -r dir
(새 줄) do
) 루프를 시작합니다 . 이 명령은 while
들어오는 파이프가 열려 있는 동안 while
(전체 디렉토리 목록이 전송될 때까지) read
변수에 다음 줄을 넣습니다 dir
. 그럼 계속...
파트 3: printf "%s:\t" "$dir"
디렉토리 이름 중 하나를 포함하는 문자열이 인쇄되고 $dir
그 뒤에 콜론과 탭(개행은 아님)이 표시됩니다.
파트 4: find "$dir" -type f
디렉토리에 이름이 지정된 모든 파일 목록입니다 $dir
. 이 목록은 다음으로 전송됩니다...
파트 5: wc -l
표준 입력으로 전송된 라인 수를 셉니다.
마지막 부분: done
간단히 while
루프를 종료합니다.
이렇게 하면 현재 디렉터리 아래의 모든 디렉터리 목록을 얻을 수 있습니다. 각 디렉토리에 대해 사용할 수 있도록 그 안에 있는 모든 파일의 목록을 생성합니다 wc -l
. 결과는 다음과 같습니다.
./dir1: 234
./dir2: 11
./dir3: 2199
...
답변2
시도해 보세요 find . -type f | wc -l
. 현재 디렉터리의 모든 파일과 하위 디렉터리의 모든 파일 수를 계산합니다. 모든 디렉터리는 파일로 간주되지 않으며 일반 파일만 포함됩니다.
답변3
다음은 몇 가지 유용한 목록 명령 모음입니다(이전 사용자 코드에서 다시 해시됨).
폴더 및 파일 수 나열:
find -maxdepth 1 -type d | sort | while read -r dir; do n=$(find "$dir" -type f | wc -l); printf "%4d : %s\n" $n "$dir"; done
0이 아닌 파일이 있는 폴더를 나열합니다.
find -maxdepth 1 -type d | sort | while read -r dir; do n=$(find "$dir" -type f | wc -l); if [ $n -gt 0 ]; then printf "%4d : %s\n" $n "$dir"; fi; done
하위 폴더 수와 함께 폴더 나열:
find -maxdepth 1 -type d | sort | while read -r dir; do n=$(find "$dir" -type d | wc -l); let n--; printf "%4d : %s\n" $n "$dir"; done
하위 폴더 수가 0이 아닌 폴더 목록:
find -maxdepth 1 -type d | sort | while read -r dir; do n=$(find "$dir" -type d | wc -l); let n--; if [ $n -gt 0 ]; then printf "%4d : %s\n" $n "$dir"; fi; done
빈 폴더를 나열합니다.
find -maxdepth 1 -type d | sort | while read -r dir; do n=$(find "$dir" | wc -l); let n--; if [ $n -eq 0 ]; then printf "%4d : %s\n" $n "$dir"; fi; done
콘텐츠 개수와 함께 비어 있지 않은 폴더를 나열합니다.
find -maxdepth 1 -type d | sort | while read -r dir; do n=$(find "$dir" | wc -l); let n--; if [ $n -gt 0 ]; then printf "%4d : %s\n" $n "$dir"; fi; done
답변4
Du - 인덱스 노드
왜 (나를 포함하여) 아무도 다음 사항을 알지 못하는지 모르겠습니다.
du --inodes
--inodes
list inode usage information instead of block usage
나는 이것이 OP의 문제를 해결한다고 확신합니다. 나는 내 거대한 드라이브에서 모든 정크가 어디에 있는지 알아내기 위해(그리고 그것을 오래된 디스크로 오프로드하기 위해) 그것을 많이 사용하기 시작했습니다.
추가 정보
재귀적(다른 경우에 유용할 수 있음)을 원하지 않는 경우 다음을 추가하십시오.
-S, --separate-dirs