1. 사용 명령어 |
(1) find
(2) wc
2. 키워드 & 사용처 |
(1) 키워드
파일 수, 디렉터리 수, 카운트
(2) 사용처
작업 디렉터리 등 여러 파일이 있는 디렉터리에서 파일 수, 디렉터리 수를 세고 싶을 때 사용합니다.
3. 실행 예제 |
$ ./findcount.sh
대상 디렉터리: /home/park/myapp/work
파일 수: 4
디렉터리 수: 2
4. 스크립트 |
#!/bin/sh
targetdir="home/park/myapp/work"
filecount=$(find "$targetdir" -maxdepth 1 -type f -print | wc -l) ①
dircount=$(find "$targetdir" -maxdepth 1 -type d -print | wc -l ①
dircount=$(expr $dircount -1) ②
echo "대상 디렉터리: $targetdir"
echo "파일 수: $filecount"
echo "디렉터리 수: $dircount"
5. 해설 |
이 스크립트는 /home/park/myapp/work 디렉터리에 있는 파일 수와 디렉터리 수를 표시합니다. 지정한 디렉터리 바로 아래에 있는 파일만 세서 서브디렉터리에 있는 파일 수는 포함하지 않습니다.
이때 대상 디렉터리 /home/park/myapp/work에 있는 파일 목록은 다음과 같습니다.
a.log
b.log
c.log
d.log
backup(디렉터리)
1.log
2.log
calc(디렉터리)
파일로 a.log, b.log, c.log, d.log 라는 4개가 있고 backup, calc 라는 서브디렉터리가 있습니다. 또한, 서브디렉터리 [backup] 안에는 1.log, 2.log 라는 두 파일이 있습니다.
특정 디렉터리 아래의 파일 목록을 만들려면 find 명령어를 자주 사용합니다. find 명령어의 기본 사용법은 아래와 같습니다.
find [대상 경로] [서술식]
서술식으로 주로 -name과 -type을 씁니다. -name은 파일명을 지정하여 특정 패턴의 파일명을 찾을 때 사용합니다.
여기서 사용한 -type은 파일 종류를 지정합니다. -type으로 지정 가능한 종류는 아래와 같습니다. 이중 자주 쓰는 것은 -type d(디렉터리), -type f(일반 파일), -type l(심볼릭 링크)입니다.
서술식 지정 | 설명 |
-type b | 블록 스페셜 파일 |
-type c | 캐릭터 스페셜 파일 |
-type d | 디렉터리 |
-type p | FIFO(파이프) |
-type f | 일반 파일 |
-type l | 심볼릭 링크 |
-type s | 소켓 |
--menu | 메뉴 목록 표시 |
①에서는 -type f와 -type d로 각각 파일 목록과 디렉터리 목록을 표시하고, 그 줄 수를 wc 명령어의 -l 옵션으로 취득해서 셸 변수 filecount에 파일 수를, dircount에 디렉터리 수를 대입합니다.
①에서 find 명령어를 실행할 때 -maxdepth라는 옵션을 사용합니다. 이것은 서브디렉터리를 대상에서 제외하기 위함입니다.
find 명령어는 아무것도 지정하지 않으면 서브디렉터리도 포함해서 검색합니다. 이 예제에서는 디렉터리 /home/park/myapp/work 바로 아래에 있는 파일 수와 디렉터리를 카운트하므로 서브디렉터리는 포함하지 않습니다. 따라서 -maxdepth 1로 1단계만(즉 지정 디렉터리만) 대상으로 합니다.
find 명령어 마지막에 -print가 있습니다. 이것은 찾은 파일을 그대로 표시합니다. 아무것도 지정하지 않으면 -print라고 보기 때문에 -print는 생략할 수 있습니다. -print 외에도 -exec(명령어 실행), -ls(상세 정보를 포함해서 파일 목록 표시) 등이 있습니다.
②는 카운트한 디렉터리 수에서 1을 뺍니다. 이것은 find 명령어의 -type d로 디렉터리 목록을 표시하면 아래처럼 대상 경로가 먼저 표시되므로 실제 서브디렉터리 수보다ㅏ 하나 더 많게 나오기 때문입니다.
$ find /home/park/myapp/work -type d -print
/home/park/myapp/work
/home/park/myapp/work/backup
/home/park/myapp/work/calc
대상 경로에 있는 디렉터리 수를 셀 때는 -type d 출력 결과에서 1을 빼야 합니다. 따라서 ②에서 expr 명령어를 써서 셸 변수 dircount에서 1을 빼고 그 결과를 명령어 치환 $()로 얻어 디렉터리 수를 셀 수 있습니다.
참고서적 : 유닉스 리눅스 셸 스크립트 예제 사전
'IT 이야기 > Linux 셸 스크립트' 카테고리의 다른 글
[Linux 셸 스크립트] 파일처리 - 028 신규 파일을 만들지 않고 이미 있는 파일만 파일 갱신일을 바꾸기 (0) | 2021.03.17 |
---|---|
[Linux 셸 스크립트] 파일처리 - 027 파일 내용을 삭제해서 빈 파일로 만들기 (0) | 2021.03.17 |
[Linux 셸 스크립트] 파일처리 - 025 디렉터리 이동한 다음 간단히 원래 장소로 돌아가기 (0) | 2021.03.16 |
[Linux 셸 스크립트] 파일처리 - 024 명령어 사용법을 표시할 때 현재 파일명 표시하기 (0) | 2021.03.16 |
[Linux 셸 스크립트] 파일처리 - 023 절대 경로, 상대 경로 관계없이 같은 동작하기 (0) | 2021.03.11 |
댓글