하위 디렉토리에 얼마나 많은 파일이 있는지 확인하고 모든 inode 사용법이 시스템에서 어디에 있는지 확인하고 싶습니다. 나는 공간 사용을 위해 이것을하는 것처럼
du -sh /*
루트가 아닌 디렉토리에서 사용되는 공간을 제공하지만이 경우 크기가 아닌 파일 수를 원합니다.
답변
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
현재 작업 디렉토리의 모든 디렉토리 목록을 반환합니다. 이것은 파이프입니다 …
두 번째 부분 : while read -r dir; do
while 루프 시작 – while으로 들어오는 파이프가 열려있는 동안 (전체 디렉토리 목록이 전송 될 때까지) read 명령은 다음 행을 변수 “dir”에 넣습니다. 그런 다음 계속됩니다 …
세 번째 부분 : printf "%s:\t" "$dir";
“$ dir”(디렉토리 이름 중 하나를 보유)에 문자열을 인쇄 한 다음 탭을 표시합니다.
네 번째 부분 : find "$dir -f file"
“$ dir”에있는 디렉토리 이름 내의 모든 파일 목록을 만듭니다. 이 목록은 다음 주소로 전송됩니다.
다섯 번째 부분 : wc -l;
표준 입력으로 전송 된 라인 수를 계산합니다.
마지막 부분 : done
while 루프를 종료합니다.
따라서 현재 디렉토리의 모든 디렉토리 목록을 얻습니다. 이러한 각 디렉토리에 대해 모든 파일 목록을 생성하여를 사용하여 모두 계산할 수 있습니다 wc -l
. 결과는 다음과 같습니다.
./dir1: 234
./dir2: 11
./dir3: 2199
...
답변
시도해보십시오 find . -type f | wc -l
. 현재 디렉토리의 모든 파일과 하위 디렉토리의 모든 파일을 계산합니다. 모든 디렉토리는 파일로 계산되지 않으며 일반 파일 만 계산됩니다.
답변
다음은 유용한 목록 명령어 모음입니다 (이전 사용자 코드를 기반으로 다시 해시 됨).
파일 개수가 포함 된 폴더 나열 :
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
답변
시험:
find /path/to/start/at -type f -print | wc -l
시작점으로 또는 디렉토리의 서브 디렉토리를 통해서만 재귀를 원하는 경우 (그리고 해당 최상위 디렉토리의 파일을 건너 뛰십시오)
find `find /path/to/start/at -mindepth 1 -maxdepth 1 -type d -print` -type f -print | wc -l
답변
다음 솔루션은 현재 디렉토리에서 시작하는 실제 사용 된 inode 수를 계산합니다.
find . -print0 | xargs -0 -n 1 ls -id | cut -d' ' -f1 | sort -u | wc -l
동일한 서브 세트의 파일 수를 얻으려면 다음을 사용하십시오.
find . | wc -l
현재 디렉토리의 파일을 고려하지 않고 하위 디렉토리 만 탐색하는 솔루션의 경우 다른 답변을 참조 할 수 있습니다.
답변
OS X 10.6은에 대한 경로를 지정하지 않기 때문에 허용 된 답변의 명령에서 질식합니다 find
. 대신 다음을 사용하십시오.
find . -maxdepth 1 -type d | while read -r dir; do printf "%s:\t" "$dir"; find "$dir" -type f | wc -l; done
답변
나는 파티에 늦었다는 것을 알고 있지만,이 순수한 bash
(또는 더블 스타 글롭을 허용하는 다른 쉘) 솔루션은 어떤 상황에서는 훨씬 빠를 수 있다고 생각합니다.
shopt -s globstar # to enable ** glob in bash
for dir in */; do a=( "$dir"/**/* ); printf "%s\t%s\n" "$dir:" "${#a[*]}"; done
산출:
d1/: 302
d2/: 24
d3/: 640
...