[linux] 특정 디렉토리의 디렉토리 수 계산

특정 디렉터리의 폴더 수를 계산하는 방법. 다음 명령을 사용하고 있지만 항상 추가 명령을 제공합니다.

find /directory/ -maxdepth 1 -type d -print| wc -l

예를 들어, 3 개의 폴더가있는 경우이 명령은 4를 제공합니다. 5 개의 폴더가 포함 된 경우 명령은 6을 제공합니다. 그 이유는 무엇입니까?



답변

find 디렉토리 자체도 인쇄합니다.

$ find .vim/ -maxdepth 1 -type d
.vim/
.vim/indent
.vim/colors
.vim/doc
.vim/after
.vim/autoload
.vim/compiler
.vim/plugin
.vim/syntax
.vim/ftplugin
.vim/bundle
.vim/ftdetect

대신 디렉토리의 하위 항목을 테스트하고 하위 항목으로 내려 가지 않도록 할 수 있습니다.

$ find .vim/* -maxdepth 0 -type d
.vim/after
.vim/autoload
.vim/bundle
.vim/colors
.vim/compiler
.vim/doc
.vim/ftdetect
.vim/ftplugin
.vim/indent
.vim/plugin
.vim/syntax

$ find .vim/* -maxdepth 0 -type d | wc -l
11
$ find .vim/ -maxdepth 1 -type d | wc -l
12

다음을 사용할 수도 있습니다 ls.

$ ls -l .vim | grep -c ^d
11


$ ls -l .vim
total 52
drwxrwxr-x  3 anossovp anossovp 4096 Aug 29  2012 after
drwxrwxr-x  2 anossovp anossovp 4096 Aug 29  2012 autoload
drwxrwxr-x 13 anossovp anossovp 4096 Aug 29  2012 bundle
drwxrwxr-x  2 anossovp anossovp 4096 Aug 29  2012 colors
drwxrwxr-x  2 anossovp anossovp 4096 Aug 29  2012 compiler
drwxrwxr-x  2 anossovp anossovp 4096 Aug 29  2012 doc
-rw-rw-r--  1 anossovp anossovp   48 Aug 29  2012 filetype.vim
drwxrwxr-x  2 anossovp anossovp 4096 Aug 29  2012 ftdetect
drwxrwxr-x  2 anossovp anossovp 4096 Aug 29  2012 ftplugin
drwxrwxr-x  2 anossovp anossovp 4096 Aug 29  2012 indent
drwxrwxr-x  2 anossovp anossovp 4096 Aug 29  2012 plugin
-rw-rw-r--  1 anossovp anossovp 2505 Aug 29  2012 README.rst
drwxrwxr-x  2 anossovp anossovp 4096 Aug 29  2012 syntax

$ ls -l .vim | grep ^d
drwxrwxr-x  3 anossovp anossovp 4096 Aug 29  2012 after
drwxrwxr-x  2 anossovp anossovp 4096 Aug 29  2012 autoload
drwxrwxr-x 13 anossovp anossovp 4096 Aug 29  2012 bundle
drwxrwxr-x  2 anossovp anossovp 4096 Aug 29  2012 colors
drwxrwxr-x  2 anossovp anossovp 4096 Aug 29  2012 compiler
drwxrwxr-x  2 anossovp anossovp 4096 Aug 29  2012 doc
drwxrwxr-x  2 anossovp anossovp 4096 Aug 29  2012 ftdetect
drwxrwxr-x  2 anossovp anossovp 4096 Aug 29  2012 ftplugin
drwxrwxr-x  2 anossovp anossovp 4096 Aug 29  2012 indent
drwxrwxr-x  2 anossovp anossovp 4096 Aug 29  2012 plugin
drwxrwxr-x  2 anossovp anossovp 4096 Aug 29  2012 syntax


답변

현재 디렉터리의 디렉터리 수만 가져옵니다.

echo */ | wc

당신은 밖으로 나올 것입니다 1 309 4594

2nd digit아니오를 나타냅니다. 디렉토리의.

또는

tree -L 1 | tail -1


답변

find . -mindepth 1 -maxdepth 1 -type d | wc -l

For find -mindepth는 디렉토리의 총 수를 의미합니다.

-maxdepth 디렉토리에 영향을 미치는 총 수를 의미합니다.

-type d 디렉토리를 의미

그리고 for wc -l는 입력의 줄을 세는 것을 의미합니다.


답변

폴더에 디렉토리 만 있고 파일이없는 경우 다음을 수행합니다.

ls | wc -l


답변

드라이브로 이동하여 실행하는 가장 좋은 방법

ls -lR | grep ^d | wc -l

하위 디렉토리를 포함하여 전체 폴더를 모두 찾으시겠습니까?

find /mount/point -type d | wc -l

… 또는 루트 디렉터리 (하위 디렉터리 제외)에서 모든 폴더를 찾습니까?

find /mount/point -maxdepth 1 -type d | wc -l

건배!


답변

stat -c %h folder결과에서 2를 실행 하고 뺍니다. 여기에서는 대부분의 다른 솔루션 (일반적으로 find더하기 wc)에 필요한 2 개 (또는 3 개)와 달리 단일 하위 프로세스 만 사용합니다 .

sh / bash 사용 :

cnt = $ ((`stat -c % h folder`-2))
echo $ cnt # ‘echo’는 추가 프로세스가 아닌 sh / bash 내장입니다.

csh / tcsh 사용 :

@ cnt =`stat -c % h folder`-2
echo $ cnt # ‘echo’는 추가 프로세스가 아닌 csh / tcsh 내장입니다.

설명 : stat -c %h folder에 하드 링크의 수 출력 폴더를 , 그리고 아래의 각 하위 폴더 에 하드 링크 다시하는 ../ 항목이 포함되어 폴더를 . 개수에 두 개의 추가 하드 링크가 있으므로 2를 빼야합니다.

  1. 폴더 의 자체 참조 ./ 항목 및
  2. 폴더 의 상위 폴더 링크

답변

가장 쉬운 방법은

  ls -ld images/* | wc -l

images대상 디렉토리는 어디에 있습니까 ? -d 플래그는 디렉토리로 제한되며 -l 플래그는 wc -l행 수에 대해 매우 익숙한 것과 호환되는 행별 목록을 수행합니다 .