2012-08-10 2 views
1

디렉토리의 파일 수를 계산하는 방법에 대해 알고 싶습니다. for filename in * 루프를 사용하고 파일 이름을 테스트하여 목적을 달성했지만 문제가 발생했습니다. 디렉토리를 순환하여 얼마나 많은 (하위) 디렉토리가 있는지 계산하는 방법.디렉토리 내용 계산하기

누구나 올바른 방향으로 나를 가리킬 수 있습니까?

+0

나는 다음과 같은 순서로 뭔가를 사용할 것이라고 생각한다.'find. -maxdepth 0 -type d -print | wc' –

+0

당신이 무엇을 요구하고 있는지 분명하지 않습니다. 파일이나 하위 디렉토리 수를 계산 하시겠습니까? * 하위 디렉토리 또는 최상위 파일에있는 파일 *을 계산 하시겠습니까? –

+0

필자의 모든 스크립트는 다음과 같은 목적을 가지고 있습니다. 사용자가 디렉토리 이름을 전달하고 해당 디렉토리로 변경하고 해당 디렉토리의 디렉토리 수와 파일 수 및 이들이'-e'인지' -r' 또는'-w' –

답변

2

-d을 사용하여 디렉토리인지 테스트 할 수 있습니다.

찾을 수 있습니다 : find . -mindepth 1 -maxdepth 1 -type d

1
((n=0)) 
for fn in * 
do 
    [[ -d "${fn}" ]] && ((n=1+${n})) 
done 

가 카운터를 유지하고 디렉토리만을 위해 그것을 증가를 ...

+0

'for fn in *'은 디렉토리의 이름도 반복합니다. –

+0

또한 내 초능력을 너무 많이 보여주지 않고, 여분의 괄호와 parans는 무엇입니까? –

+0

예,'*'는 현재 디렉토리의 모든 항목과 일치합니다 ('.'로 시작하는 항목 제외). 이중 대괄호는 in-shell 버전의'test' 또는'[','''''''''''''''''''''''''와 거의 같습니다. 이중 괄호는 수학 표현식을 표시하고이를 수학 식으로 평가하는 데 사용됩니다. 자세한 정보는'man bash'를 읽으십시오. – twalberg

1

당신이 뭘 하려는지? wc 명령을 살펴보십시오. 출력의 행 수를 계산하는 특히 wc -l. 출력을 생성하는 명령의 전체 배열을 사용하여 wc -l에 연결할 수 있습니다. 파일에 머리글과 바닥 글을 추가하는 명령은주의하십시오 (예 : ls -l).

다음은 몇 가지 예입니다 :

이것은 .로 시작하지 않는 모든 파일과 디렉토리를 계산합니다 :

$ ls | wc -l 

그것은 루프 당신이 당신의 질문을했다 당신과 동일합니다.

개를 포함하여 모든 파일 및 디렉토리를 계산합니다. ls -a 대신 ls -A에 유의하십시오.

$ find . | wc -l 

이 만의 디렉토리를 계산합니다

$ ls -A | wc -l 

이 전체 디렉토리 트리에있는 모든 파일과 디렉토리를 계산합니다 : 두 번째 의지하면서 파일로 ...을 나열하지 않습니다 첫 번째 이 전체 디렉토리 트리에있는 모든 파일을 계산합니다

$ find . -type d| wc -l 

전체 디렉토리 트리

$ find . -type f | wc -l 

LS - 이것은 당신이 변수에 할당하려면이 옵션을 사용할 수 있습니다, 현재 디렉토리

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

을의 디렉토리 수에 당신을 제한합니다 : 여기

$ num_of_files=$(find . -type f | wc -l) 
+0

이것은 매우 흥미 롭습니다. 얼마나 많은 실행 파일이 있는지 확인하는 것과 같은 플래그를 추가하는 방법이 있습니까? –

+0

@ConnorBlack find 명령의 맨 페이지를 살펴보십시오. 빠른 검사는'-executable' 플래그를 매개 변수로 표시합니다 :'find. 실행할 수있는 -type f'입니다. 명령 행 프롬프트에서'man find'를 입력하십시오. 바로 잠수 해 문서가 당신을 협박하게하지 마십시오. –

0

디렉토리를 계산하는 방법 또는 디렉토리 이름을 사용하는 방법입니다.

#!/bin/bash 

old_IFS=$IFS 
IFS=$'\n' 
array=($(ls -F /foo/bar/ | grep '/$')) # this creates an array named "array" that holds 
IFS=$old_IFS       # all the directory names located in /foo/bar/ 

echo ${#array[@]} # this will give you the number of directories in /foo/bar/ 

for ((i=0; i<${#array[@]}; i++)) 
do 
echo ${array[$i]} # this will output a list of all the directories 
done 

또는 당신은 할 수 :

ls -F /foo/bar/ | grep '/$' | cat > directorynames.txt 

한 다음 행의 수를 계산합니다.또는 고양이를 없애고 모든 개행 문자에 대해 셀 수있는 for 루프에 위를 넣을 수 있습니다.

관련 문제