[Shell Script] 디렉터리에 있는 파일과 디렉터리 수 조사 하기

 디렉터리에 있는 파일과 디렉터리 수 조사 하기 


작업 디렉터리 등 여러 파일이 있는 디렉터리에서 파일 수, 디렉터리 수를 세고 싶을 때 사용합니다 . 

#!/bin/sh

targetdir="/home/vscode/myapp"

filecount=$(find "$targetdir" -maxdepth 1 -type f -print | wc -l)
dircount=$(find "$targetdir" -maxdepth 1 -type d -print | wc -l)      #1

dircount=$(expr $dircount - 1)          #2

echo "대상 디렉터리 : $targetdir"
echo "파일 수 : $filecount"
echo "디렉터리 수 : $dircount"














이 스크립트는 /home/vscode/myapp/ 디렉터리 아래에 있는 파일 수와 디렉터리 수를 표시 합니다 . 

#1에서는 -type f와 -type d 로 각각 파일 목록과 디렉터리 목록을 표시하고 그 줄 수를 wc -l명령으로 취득하여 셸 변수filecount에 파일 수를 , discount에 디렉터리 수를 대입합니다 . 

#1에서 find 명령어를 실행할 때 -maxdepth라는 옵션을 사용합니다 . 서브 디렉터리를 대상에서 제외 하기 위함입니다 .
 

find 명령어는 아무것도 지정하지 않으면 서브디렉토리도 포함하여 검색합니다 . 


이 예제에서는 디렉터리 /home/vscode/myapp 바로 아래에 있는 파일 수와 디렉터리 수를 카운트 하므로 서브  디렉터리는 포함하지 않습니다 . 
따라서 -maxdepth 1로 1단계만 대상으로 합니다 . 

find 명령어 마지막에 print가 있습니다 .

 
이것은 찾은 파일을 그대로 표시 합니다 .  
 


#2는 카운트한 디렉터리 수에서 1을 뺍니다 .
이것은 find 명령어의 -type d 로 디렉터리 목록을 표시하면 다음 처럼 대상 경로가 먼저 표시되므로 실제 서브디렉토리 수보다 하나 더 많이 출력되기 때문입니다 . 


find 명령어로 디렉터리 목록 표시




 





대상 경로에 있는 디렉터리 수를 셀 때는 -type d 출력 결과에서 1을 빼야합니다 . 
따라서 #2 expr 명령어를 사용하여 dircount에서 1을 빼고 그 결과를 치환 $()로 얻어 디렉토리 수를 셀 수 있습니다 . 


스크립트 결과