2007. 7. 3. 17:48
2. find 의 다양한 옵션
2007. 7. 3. 17:48 in 내가쓰는리눅스 강좌
- 파일 이름에 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에게 전달이 안되는 것입니다.
이러한 경우 다음과 같이 하시면 됩니다.
find . -name "*.log" -a -mtime +3 -exec rm {} \;
또한 질문하신 내용중 -mtime +3 이라고 하면 마지막 수정시간이 3일을 포함하여 그 이후의 것... 예를들어 3일전 4일전
5일전 6일전 ... 이 되는 것이구요..
-mtime -3이라고 하면 3일 이전의 것 0일전, 1일전, 2일전, 3일전 뭐 이런 의미가 됩니다.
정확히 3일전 것만 하시려면 +나 -없이 그냥 -mtime 3이라고만 지정하시면 됩니다.
================
실제사용 예
find . -name "OUT200703*"
OUT200703 으로 시작하는 파일 찾기
find . -name "OUT200703*" -exec rm -f {} \;
OUT200703 으로 시작하는 파일 찾고 지우기
find . -name "OUT200703*" && find . -name "*.mp3"
OUT200703으로 시작하는 파일과 mp3 로 끝나는 파일 찾기
find . -name "cdr1.txt.2006*"
==================== 생성된지 3분이상된 파일을 이동시키는 것
find /var/spool/asterisk/monitor -cmin +3 -exec mv /var/spool/asterisk/tmp {} \;
find . -cmin +3 -exec cp /var/spool/asterisk/tmp {} \;
find . -cmin +3 && find . -name "OUT*.wav" -exec mv /var/spool/asterisk/tmp {} \;
find . -cmin +3 && find . -name "OUT*.wav" -exec mv /var/spool/asterisk/tmp {} \;
find . -cmin +3 -mtime 0 -exec rm -f {} \;
find . -name "*.wav" | xargs ls -l | grep test
find . -name "*.wav" | xargs ls -l | grep OUT105
mv `find . -cmin +3` /var/spool/asterisk/
find / -name "*.c" -print -depth&
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에게 전달이 안되는 것입니다.
이러한 경우 다음과 같이 하시면 됩니다.
find . -name "*.log" -a -mtime +3 -exec rm {} \;
또한 질문하신 내용중 -mtime +3 이라고 하면 마지막 수정시간이 3일을 포함하여 그 이후의 것... 예를들어 3일전 4일전
5일전 6일전 ... 이 되는 것이구요..
-mtime -3이라고 하면 3일 이전의 것 0일전, 1일전, 2일전, 3일전 뭐 이런 의미가 됩니다.
정확히 3일전 것만 하시려면 +나 -없이 그냥 -mtime 3이라고만 지정하시면 됩니다.
================
실제사용 예
find . -name "OUT200703*"
OUT200703 으로 시작하는 파일 찾기
find . -name "OUT200703*" -exec rm -f {} \;
OUT200703 으로 시작하는 파일 찾고 지우기
find . -name "OUT200703*" && find . -name "*.mp3"
OUT200703으로 시작하는 파일과 mp3 로 끝나는 파일 찾기
find . -name "cdr1.txt.2006*"
==================== 생성된지 3분이상된 파일을 이동시키는 것
find /var/spool/asterisk/monitor -cmin +3 -exec mv /var/spool/asterisk/tmp {} \;
find . -cmin +3 -exec cp /var/spool/asterisk/tmp {} \;
find . -cmin +3 && find . -name "OUT*.wav" -exec mv /var/spool/asterisk/tmp {} \;
find . -cmin +3 && find . -name "OUT*.wav" -exec mv /var/spool/asterisk/tmp {} \;
find . -cmin +3 -mtime 0 -exec rm -f {} \;
find . -name "*.wav" | xargs ls -l | grep test
find . -name "*.wav" | xargs ls -l | grep OUT105
mv `find . -cmin +3` /var/spool/asterisk/
find / -name "*.c" -print -depth&
루트디렉토리(/)에서 아래로 내려가면서(-depth)
확장자가(.c)인 파일(-name "*.c")을 찾아 프린트(-print)해라
맨 끝에 &는 백그라운드 프로세스로 실행하란 겁니다.
'내가쓰는리눅스 강좌' 카테고리의 다른 글
10. 시간 동기화 rdate 와 다른 NTP (6) | 2008.04.21 |
---|---|
[리눅스 다운받는 곳] (1) | 2008.03.05 |
9. 리눅스 df 명령어 (0) | 2007.11.20 |
8. 리눅스 명령어 find 와 옵션 (12) | 2007.10.15 |
7. 리눅스의 시간 date 와 hwclock (0) | 2007.09.04 |
6. vsftp 유용한 옵션 (0) | 2007.07.13 |
5. cron 과 그 활용법 (0) | 2007.07.12 |
4. 리눅스 du 와 df (2) | 2007.07.11 |
3. cp 리눅스 copy 명령어 (1) | 2007.07.03 |
1. rdate 리눅스 서버 시간동기화 (0) | 2007.07.03 |