특정 디렉터리의 디렉터리 수 계산
특정 디렉터리의 폴더 수를 계산하는 방법.다음 명령을 사용하고 있지만 항상 추가 명령을 제공합니다.
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
찾기 위해-mindepth
디렉터리에 있는 총 수신자 수를 의미합니다.
-maxdepth
디렉터리에 있는 총 수신자 수를 의미합니다.
-type d
평균 디렉터리
그리고wc -l
평균은 입력의 라인을 카운트합니다.
폴더에 디렉터리만 있고 파일이 없는 경우 다음 작업을 수행합니다.
ls | wc -l
달려.stat -c %h folder
그리고 결과에서 2를 뺍니다.여기에 있는 대부분의 다른 솔루션(일반적으로)에 필요한 2개(또는 3개)의 하위 프로세스가 아닌 하나의 하위 프로세스만 사용합니다.find
또는ls
플러스wc
).
sh/bash 사용:
echo $('stat - c %h folder' - 2) # 'filename'은 내장된 셸입니다.
csh/tcsh 사용:
cnt = 'stat - c %h folder' - 2; echo $cnt # 'folder'는 내장된 셸입니다.
설명:stat -c %h folder
에서는 폴더에 대한 하드 링크 수를 인쇄하고 폴더 아래의 각 하위 폴더에는 폴더에 대한 하드 링크인 .../ 항목이 포함되어 있습니다.카운트에 두 개의 추가 하드 링크가 있으므로 2를 빼야 합니다.
- 폴더 자체의 자기 차별적인 ./ 입력 및
- 폴더의 상위 폴더 링크
드라이브로 이동하여 간단히 실행하는 가장 좋은 방법
ls -lR | grep ^d | wc -l
하위 디렉터리를 포함한 전체 폴더를 찾으시겠습니까?
find /mount/point -type d | wc -l
...또는 루트 디렉터리(하위 디렉터리 제외)의 모든 폴더를 찾으시겠습니까?
find /mount/point -maxdepth 1 -type d | wc -l
건배!
제 생각에 가장 쉬운 것은.
ls -ld images/* | wc -l
어디에images
대상 디렉터리입니다.-d 플래그는 디렉토리로 제한되며 -l 플래그는 매우 친숙한 것과 호환되는 라인별 목록을 수행합니다.wc -l
라인 카운트용.
아래 명령을 사용하여 찾을 수 있는 디렉터리가 없습니다.
ls -l | grep "^d" | wc -l
몇 가지 유용한 예:
현재 dir의 파일 수
/bin/ls -lA | egrep -c '^-'
current dir에서 dir 수
/bin/ls -lA | egrep -c '^d'
current dir의 파일 및 dir 수
/bin/ls -lA | egrep -c '^-|^d'
하나의 하위 디렉터리에 있는 파일 및 dir 수
/bin/ls -lA subdir_name/ | egrep -c '^-|^d'
저는 이상한 것을 알아차렸습니다(적어도 제 경우에는).
내가 시도했을 때
ls
에 신대/bin/ls
그자리의-A
매변do not list implied . and ..
예상대로 작동하지 않습니다.를 할 때ls
/ 그가.. / 그래서 그 결과는 잘못된 것입니다.솔루션:/bin/ls
에 신대ls
디렉토리 수를 가져오려면 - 디렉토리로 이동하여 실행합니다.
ls -l | grep -c ^d
순수 bash 솔루션:
shopt -s nullglob
dirs=( /path/to/directory/*/ )
echo "There are ${#dirs[@]} (non-hidden) directories"
숨겨진 디렉터리도 계산하려는 경우:
shopt -s nullglob dotglob
dirs=( /path/to/directory/*/ )
echo "There are ${#dirs[@]} directories (including hidden ones)"
디렉토리에 대한 링크도 계산됩니다.만약 당신이 그것을 원하지 않는다면, 이 방법은 조금 더 어렵습니다.
용사를 합니다.find
:
find /path/to/directory -type d \! -name . -prune -exec printf x \; | wc -c
비결은 다음을 출력하는 것입니다.x
합니다.wc
문자 수를 계산합니다.이렇게 하면 링크를 제외한 모든 디렉토리(숨겨진 디렉토리 포함)의 수가 계산됩니다.
여기에 제시된 방법은 모두 파일 이름(공백, 줄 바꿈, 전역 문자 등)에 나타날 수 있는 재미있는 문자에 안전하게 쓸 수 있습니다.
용사를 합니다.zsh
:
a=(*(/N)); echo ${#a}
그N
glob, null 글입니다입니다./
.#
수효가 있습니다.수 뿐만 아니라 반환할 수도 있습니다.0
디렉터리가 없는 경우.
당신이 원하는 것에 대한 가장 좋은 대답은
echo `find . -maxdepth 1 -type d | wc -l`-1 | bc
이것은 목록을 찾는 원하지 않는 '.' 디렉터리를 제거하기 위해 하나를 뺍니다(위에서 언급한 파텔 데븐).
하위 폴더를 재귀적으로 카운트하려면 최대 깊이 옵션을 생략하십시오.
echo `find . -type d | wc -l`-1 | bc
PS 명령 대체가 못생겼다고 판단될 경우 하나를 빼는 것은 다음을 사용하여 순수 스트림으로 수행할 수 있습니다.sed
그리고.bc
.
카운트에서 1 빼기:
find . -maxdepth 1 -type d | wc -l | sed 's/$/-1\n/' | bc
또는 빼기 1에 카운트를 추가합니다.
find . -maxdepth 1 -type d | wc -l | sed 's/^/-1+/' | bc
모든 파일 및 하위 폴더, 창 유형:
dir=/YOUR/PATH;f=$(find $dir -type f | wc -l); d=$(find $dir -mindepth 1 -type d | wc -l); echo "$f Files, $d Folders"
정규식을 사용하려면 다음을 시도하십시오.
ls -c | grep "^d" | wc -l
folder01, folder02, folder03 등과 같은 이름을 가진 폴더를 세고 싶다면,
ls -l | grep ^d | grep -c folder
가장 좋은 방법:
ls -la | grep -v total | wc -l
이것은 당신에게 완벽한 카운트를 제공합니다.
언급URL : https://stackoverflow.com/questions/17648033/counting-number-of-directories-in-a-specific-directory
'programing' 카테고리의 다른 글
유형 오류: $(...).DataTable이 함수가 아닙니다. (0) | 2023.04.26 |
---|---|
ASP.NET Core CORS WebAPI: 액세스 제어-원산지 허용 헤더 없음 (0) | 2023.04.26 |
범위.Chr(1)에 대해 바꾸기는 항상 참입니다. (0) | 2023.04.26 |
WPF는 C++과 함께 작동합니까? (0) | 2023.04.26 |
새 각도 프로젝트를 생성하기 위한 종속성 트리 오류를 해결할 수 없습니다. (0) | 2023.04.26 |