LINUX
2006.02.02 11:39

Unix Find 명령 기본 사용법

조회 수 49740 댓글 0
?

단축키

Prev이전 문서

Next다음 문서

+ - Up Down Comment Print
?

단축키

Prev이전 문서

Next다음 문서

+ - Up Down Comment Print

* / 는 최상위 디렉터리를 뜻함. 만약 찾고자 하는 디렉터리가 있다면 그걸로 대체

- 파일 이름에 foobar 가 들어간 파일 찾기
   find / -name "foobar" -print

- 특정 사용자(foobar) 소유의 파일을 찾기
   find / -user foobar -print | more

- 최근 하루동안에 변경된 파일을 찾기
   find / -ctime -1 -a -type f | xargs ls -l | more

- 오래된 파일(30일 이상 수정되지 않은 파일) 찾기
   find / -mtime +30 -print | more

- 최근 30일안에 접근하지 않은 파일과 디렉터리를 별도의 파일로 만들기
   find / ! ( -atime -30 -a ( -type d -o -type f ) ) | xargs ls -l > not_access.txt

- 하위 디렉터리로 내려가지 않고 현재 디렉터리에서만 검색하기
   find . -prune ...

- 퍼미션이 777 인 파일 찾기
   find / -perm 777 -print | xargs ls -l | more

- others 에게 쓰기(write) 권한이 있는 파일을 찾기
   find / -perm -2 -print | xargs ls -l | more

- others 에게 쓰기(write) 권한이 있는 파일을 찾아 쓰기 권한을 없애기
   find / -perm -2 -print | xargs chmod o-w
      또는
   find / -perm -2 -exec chmod o-w {} ; -print | xargs ls -l | more

- 사용자이름과 그룹이름이 없는 파일 찾기
   find / ( -nouser -o -nogroup ) -print | more

- 빈 파일(크기가 0 인 파일) 찾기
   find / -empty -print | more
      또는
   find / -size 0 -print | more

- 파일 크기가 100M 이상인 파일을 찾기
   find / -size +102400k -print | xargs ls -hl

- 디렉터리만 찾기?
   find . -type d ...

- root 권한으로 실행되는 파일 찾기
   find / ( -user root -a -perm +4000 ) -print | xargs ls -l | more

- 다른 파일시스템은 검색하지 않기
   find / -xdev ...

- 파일 이름에 공백이 들어간 파일 찾기
   find / -name "* *" -print

- 숨겨진(hidden) 파일을 찾기
   find / -name ".*" -print | more

- *.bak 파일을 찾아 지우기
   find / -name "*.bak" -exec rm -rf {} ;

- *.bak 파일을 찾아 특정 디렉터리로 옮기기
   mv `find . -name "*.bak"` /home/bak/

- 여러개의 파일에서 특정 문자열을 바꾸기
   find / -name "*.txt" -exec perl -pi -e 's/찾을문자열/바꿀문자열/g' {} ;

- 특정 디렉토리 하위의 모든 파일을 뒤져서 특정 문자열이 들어 있는 파일 찾기 
   find . | xargs grep csh   :  .은 현재디렉토리 이므로 현재 디렉토리 하위의 모든 파일에서 csh글자를 grep
   find /user/  | xargs grep csh 로 하면 당연  /user/ 아래의 모든 파일이 대상이 되겠져. 



------------------------------------------



find 명령어는 파일 시스템에서 주어진 조건으로 파일을 찾을 때 아주 유용하게 쓰입니다. 대표적인 용도는 오래되거나 크거나, 사용하지 않는 파일들을 찾을 때 그 위력을 발휘합니다. 기본적인 사용 방법은 다음과 같습니다.  


# find path operators
# find 대상디렉토리 검색조건 처리방법



검색종류 -name filename  filename 파일 이름으로 찾는다.  
-user username  user이름으로 찾는다.  
-group groupname  group 이름으로 찾는다.  
-perm nnn  파일 권한이 nnn인 파일을 찾는다. (ex. -perm 755)  
-type x  파일 타입이 x인 파일들을 찾는다.  
( f : 일반파일, b : 블록 특수파일, d: 디렉토리, l : 심볼릭 링크 등. )  
-atime +n  access time 이 n일 이전인 파일을 찾는다.  
-atime -n  access time이 n일 이내인 파일을 찾는다.  
-mtime +n  n일 이전에 변경된 파일을 찾는다.  
-mtime -n  n일 이내에 변경된 파일을 찾는다.  
-size n  사이즈가 n이상인 파일들을 찾는다.  
-links n  링크된 개수가 n인 파일들을 찾는다.  
-print  표준출력  
-exec command  command 실행.  
-operator  -a and 연산, -o or 연산, ! not 연산, \( expression \)  

몇가지 예를 들어 설명드리겠습니다.  


$ find /home. -name ping -print
root 디렉토리 밑에서 파일이름이 ping인 파일을 찾아 절대 경로명을 화면에 출력한다.  

$ find /home -name test* -print
/home 아래에서 파일이름이 test로 시작하는 모든 파일을 찾아서 화면에 보여줍니다.  

$ find /home -name *.c -print
/home 밑에 이름이 .c로 끝나는 모든 파일들을 찾아 경로명을 보여준다.  

$ find /home -name who.txt -print
home 디렉토리 아래에 who.txt라는 파일을 찾아 경로명을 보여준다.  

$ find /home -name core -size +2048 -print
파일 이름이 core이고 크기가 2048블럭 이상인 파일을 찾아준다.  

$ find /home -name core -exec ls -l {} \;
이름이 core인 파일을 찾아서 ls -l 한다.  

$ find /home -name core -exec rm -i {} \;
현재 디렉토리 밑에서 이름이 core인 파일을 찾아 지운다(지우기 전에 정말 지울 지를 물어본다.)  

$ find /home -user unix01 -print
파일 소유자가 unix01인 파일을 찾아준다.  

$ find /home -group unix -print
사용자그룹이 unix인 파일을 찾아준다.  

$ find /home -perm 700 -print
파일 권한이 700인 파일을 찾아준다.  

$ find /home \ ( -perm 400 -o -perm 200 ) -print
파일 권한이 400인 파일과 200인 파일을 찾아준다. (주의 : “\”의 앞뒤에 space 가 반드시 있어야 한다.)  

$ find /home -type d -print
파일 타입이 d인 파일을 찾아 경로명을 화면에 출력한다.  

$ find /home -type c -print
/dev디렉토리 아래에서 파일 타입이 c인 파일을 찾아 경로명을 보여 준다.  

$ find /home -atime +30 -print
30일 이전에 억세스되었던 파일을 찾는다.  

$ find /home -mtime -7 -print
7일 이내에 수정된 적이 있는 파일을 찾는다.  

$ find /home -size +1024 -print
파일의 블럭 크기가 1024 이상인 파일을 찾아준다.  

$ find /home -name *.bak -exec rm -rf {} \;
파일 이름이 .bak 로 끝나는 파일을 찾아서 지운다.  

$ find /home -name \*.c -atime +30 -exec ls -l {} \;
30일 이전에 억세스된 파일 중 *.c를 찾아 ls -l 한다.  

■ find 명령과 관련된 기본적인 옵션 사항들  
-------------------------------------------------------------------------------  
  식                      값/동작  
-------------------------------------------------------------------------------  
-name pattern     화일의 이름이 pattern과 일치하면 참,  
                          pattern은 셸 메타문자 *,[] ?를 포함할 수 있다.  

-perm oct           화일의 허가 플래그의 8진수 표현이 oct와 일치하면 참  

-type ch             화일의 유형이 ch(b=block, c=char등)이면 참  

-user userId       화일의 소유자가 userId이면 참  
  
-group groupId    화일의 그룹이 groupId이면 참  

-atime count       화일이 count 날 수 이내에 접근되었으면 참  

-mtime count      화일의 내용이 count 날 수 이내에 수정되었으면 참  

-ctime count      화일의 내용이 count 날 수 이내에 수정되었고,  화일의 속성이 바뀌었으면 참  

-exec cmd        수행중인 command의 종료 코드가 0이면 참. 명령은 \; 에 의해서 끝내야한다.  
                         만일 {}를 명령의 인수로 지정하면, 현재 화일의 이름으로 치환  

-print                현재 화일명을 프린트하고 참값을 반환  

-ls                    현재 화일의 속성을 보여주고 참값을 반환  

-cpio device      현재 화일을 cpio 형식으로 device에 쓰고 참값을 반환  

-!expression      expression의 논리 부정을 반환  

exp1 [-a] expr2   단축형 and: 만일 expr1이 거짓이면 거짓을 돌려주고, expr2는 수행하지 않고,  
                           만일 expr1이 참이면 expr2의 값을 반환  

expr1 -o expr2    단축형 or: 만일 expr1이 참이면 참을 반환.  
                          만일 expr1ㅣ 거짓이면 expr2의 값을 반환  

--------------------------------------------------------------------------------------------
■ find 동작 예시  
--------------------------------------------------------------------------------------------
- [root@rootman /root]# find / -name "*.c" -print  
   : 최상위 디렉토리로 부터 모든 C 소스를 출력  


- [root@rootman /root]# find / -mtime 5 -ls  
   : 최상위 디렉토리에서 5일동안 수정된 화일들을 표시  


- [root@rootman /root]# find / -name "*.bak" -exec rm -f {} \; 2>/dev/null  
   : 최상위 디렉토리로부터 bak로 끝나는 화일들을 삭제처리함  


- [root@rootman /root]# find / \(-name "*.c" -o -name "*.bak" \) -print  
   : 최상위 디렉토리에서 *.c 나 *bak 화일로 끝나는 모든 화일들의 이름을 출력  


- [root@rootman /root]# find / -name "*.o" -o -name "*.tmp"  
   : 파일 이름이 *.o 또는 *.tmp 와 일치하는 파일들에 대해서 참으로 평가  


- [root@rootman /root]# find / -type f -atime +30 -print  
   : 30일 이상 읽혀지지 않은 모든 파일들을 출력한다  


- [root@rootman /root]# find / -atime +5 \( -name "*.o" -o -name "*.tmp" \)  
   : access 시간이 5일 이상이고 이름이 .o 나 .tmp 로 끝난다.  


- [root@rootman /root]# find / ! -atime +5 \( -name "*.o" -o -name "*.tmp" \)  
   : 4번과의 반대로 의 결과를 얻는다.


Dreamy의 코드 스크랩

내가 모으고 내가 보는

List of Articles
번호 분류 제목 날짜 조회 수 추천 수
56 MFC 도스 커맨드 실행하기 1 2009.09.01 49044 0
55 MFC Cstring methods 2009.04.21 54920 0
54 LINUX 매번 잊는다.. tar 풀기 : tar zxvf file 2 2009.04.14 36568 0
53 Python py2exe를 이용한 실행파일 만들기 2009.04.10 52821 0
52 MFC 비트맵 비교 2009.03.23 40815 0
51 일반 bat(배치) 파일 제대로 쓰기 2009.02.24 53952 0
50 C C언어용 문자열 replaceAll 함수 2009.02.09 38318 0
49 C Printf 사용하기 file 2008.10.11 34114 0
48 일반 배치파일(bat 파일) 명령어 사용법 2007.01.23 42763 61
47 일반 ┗ bat(배치)파일 문법 2007.08.06 93477 8
46 LINUX [util] tar 사용법 2006.05.01 20336 7
45 LINUX sed 사용법 1 2006.02.16 41563 21
44 LINUX awk 명령어 사용법 1 2006.02.16 114622 15
43 LINUX |(파이프), grep 명령어에 대해서 2006.02.06 32455 17
42 LINUX UNIX COMMAND (5) : grep, sed, awk 등 2006.02.06 21103 66
목록
Board Pagination ‹ Prev 1 ... 26 27 28 29 30 31 32 33 34 Next ›
/ 34

나눔글꼴 설치 안내


이 PC에는 나눔글꼴이 설치되어 있지 않습니다.

이 사이트를 나눔글꼴로 보기 위해서는
나눔글꼴을 설치해야 합니다.

설치 취소

Designed by sketchbooks.co.kr / sketchbook5 board skin

Sketchbook5, 스케치북5

Sketchbook5, 스케치북5

Sketchbook5, 스케치북5

Sketchbook5, 스케치북5