
이에 대한 도움이 필요합니다.
내가 디렉토리에 있고 이 디렉토리에 다른 디렉토리와 파일 등이 있다고 가정해 보겠습니다.
재귀 함수를 사용하여 그 안과 하위에 있는 모든 파일과 디렉터리의 수를 계산하고 싶습니다.
wc ... grep 또는 find를 사용하여 문제를 해결할 수 있다는 것을 알고 있지만 여기서는 첫 번째 재귀 함수를 사용하려고 합니다.
이것이 내가 지금까지 한 일이지만 제대로 작동하지 않습니다.
counting(){
for i in $(ls -a $1)
do
if [ -d $1/$i ];then
let d++
cd $1/$i
counting $i
cd ..
elif [ -f $1/$i ];then
let f++
fi
done
}
counting $1
echo "number of files = $f ; number of directories = $d"
답변1
다음은 (완전성을 주장하지 않고) 개선할 수 있는 몇 가지 사항입니다.
절대의 출력을 구문 분석합니다
ls
.
파일이나 디렉터리 이름에 공백(대부분의 최신 파일 시스템에서는 완벽하게 합법적임)이 포함되는 즉시 스크립트가 중단됩니다.
대신 쉘의 글로빙 기능을 사용하십시오.shopt -s dotglob # to make the * glob match hidden files (like ls -a) for i in "$1"/*
항상 변수를 인용하십시오.
쉘은 공백 문자(공백, 줄 바꿈 등)를 보고 명령 인수 하나가 끝나고 다른 명령 인수가 시작되는 위치를 결정합니다. 다음 예를 고려하십시오.filename="foo bar" touch $filename # gets expanded to `touch foo bar`, so it creates two files named "foo" and "bar" touch "$filename" # gets expanded to `touch "foo bar`", so it creates a single file named "foo bar"
너무
cd
많다cd $1/$i counting $i # which in turn calls ... ls -a $1
ls
./foo/bar/bar
-구문 분석 및 인용되지 않은 변수는 제쳐두고, 이것은 당신이 가진 모든 것이 있을 때 디렉토리의 내용을 나열하려고 시도합니다./foo/bar
.