본문 바로가기

Coding/기타

linux shell - 디렉토리/파일 개수 세기

* 주요 사용 방법 정리

$ # 현재 디렉토리 내에 있는 디렉토리 개수 알고싶을 때
$ ls -l | grep ^d | wc -l

$ # 현재 디렉토리 내에 있는 파일의 개수 알고싶을 때
$ ls -l | grep ^- | wc -l

$ # 정규식(Regular Expression)을 이용해서 보다 세밀하게 파일명을 필터링하고 싶을 때
$ ls -l | grep ^- | awk '{print $9}' | grep '[정규식]' | wc -l

$ # 설치된 grep 명령어에 따라 정규식을 사용할 때,
$ # grep에 -e 옵션을 주거나 egrep을 사용해야 할 수도 있고
$ # 정규식에 따옴표를 주어야 할 수도 있다
$ ls -l | grep -e ^- | awk '{print $9}' | grep -e '[정규식]' | wc -l
$ ls -l | egrep ^- | awk '{print $9}' | egrep '[정규식]' | wc -l

 

서브 디렉토리를 포함하려면 ls -Rl를 사용하면 된다

 

 

* 해석하기

$ ls -l | grep ^- | wc -l

ls 명령어는 현재 디렉토리의 파일이나 디렉토리 목록을 보여준다

- ls 명령어에 -l 옵션을 붙여주면 디렉토리의 구체적 내용을 보여준다

- 매 줄의 시작부분을 보고 해당 내용의 종류를 알 수 있다. (d로 시작하면 디렉토리, -로 시작하면 일반파일,  l 로 시작하면 simbolic link이다)

 

 

$ ls -l | grep ^- | wc -l
$ ls -l | grep -e ^- | wc -l
$ ls -l | egrep ^- | wc -l

- grep은 설치된 grep 명령어의 종류에 따라 정규식을 사용할 때 grep-e 옵션을 주거나 egrep을 사용해야 할 수도 있다

- grep의 정규식에서  ^ 는 줄의 가장 첫 부분을 나타내고, $는 줄의 가장 마지막을 나타낸다.

- 따라서, ^-는 줄의 맨 앞이 -로 시작하는 파일, 즉 일반 파일을 세기 위해 사용하는 것이다.

- 디렉토리의 개수를 세고 싶으면 grep ^d 로 바꾸어주면 된다.

- .cpp를 확장자로 가지는 파일을 찾고 싶으면 grep ^-.*\.cpp$로 바꾸어주면 된다.

 

 

$ # txt 확장자를 가진 파일 보기
$ ls -Rl | grep '^-.*\.txt$'
$ ls -Rl | grep "^-.*\.txt$'
$ ls -Rl | grep ^-.*\.txt$


# 결과
-rw-r--r-- 1 root root 7155 11월 21 16:50 manual.txt
-rw-r--r-- 1 root root 53 11월 21 16:28 test.txt

- 설치된 grep 명령어의 종류에 다라 정규식에 따옴표를 사용해야 할 수도 있다.

 

 

$ ls -Rl | grep '^-.*\.txt$'
-rw-r--r-- 1 root root 7155 11월 21 16:50 manual.txt
-rw-r--r-- 1 root root 53 11월 21 16:28 test.txt

$ ls -Rl | grep '^-.*\.txt$' | wc -l
2

- wc -l 명령어를 해주면 파일 리스트를 출력해 주는 것이 아닌 파일 리스트의 개수를 출력해준다

 

 

 

 

 

출처: [Shell] 디렉토리/파일 개수 세기