문제 설명 : 디렉토리 내의 파일 수를 나열합니다. 참고 : 디렉토리에는 하위 디렉토리 나 파일 만 포함될 수 있지만 둘 다 포함될 수는 없습니다. 디렉토리의 수를 현명하게 나열해야합니다. 코드 조각이 있습니다. 재귀재귀 적 접근을 사용하여 유닉스 디렉토리의 파일 수
1
A
답변
2
사용 globstar
너무 깊이 :
#!/usr/bin/sh
directory_navigate()
{
path=$1
cd $path
dir_count=`ls -l|grep '^d'|wc -l`
if [ $dir_count -gt 0 ]
then
for dir in `ls`
do
sub_path="$path/$dir"
directory_navigate $subpath
done
else
sub_path=`pwd`
file_count $sub_path
return
fi
}
file_count()
{
path=$1
cd $path
count=`ls|wc -l`
echo "Count of files in $path is $count"
return
}
main()
{
filepath=/var/prod/data/extract/tbill
directory_navigate $filepath
return
}
main
이 다음과 같은 오류가 발생합니다. bash
에서 주석에 제안보다 간단한 방법은 여기
find /basefolder/ -type f -printfc | wc -c
입니다
shopt -s globstar
count=0
for name in /basefolder/**
do
[ -f "$name" ] && ((count++))
done
echo "Total files : $count"
을, 캐치는 우리가, 우리가 계산하려는 구문 분석 할 필요가 없습니다 (과 해석을하지 않는 것입니다) 더 복잡한 요구 사항을 위해 파일을 구문 분석해야하는 경우 파일을 찾으면 다음과 같은 이유로 find를 사용하지 않을 수 있습니다.
- find를 사용하려면 각 파일을 null로 구분해야합니다 (예 :
-print0
사용). - 또한 각 파일을 구문 분석하려면
while - read -r -d ' '
조합을 사용해야합니다. - 요약하자면, 그만한 가치는 없습니다.
편집 : 당신이 디렉토리 현명한 파일 카운트 목록을 가지고 싶다면은 무엇 단지`find` 사용에 대한
#!/bin/bash
shopt -s globstar
for name in ~/Documents/so/**
do
if [ -d "$name" ]
then
count="$(find "$name" -type f -printf c | wc -c)"
echo "Total files in $name : $count"
fi
done
아래합니까? – Inian