find -exec

Linux/Linux 명령어 : 2008. 11. 3. 22:13
반응형

출처 :http://unix.co.kr/bbs/board.php?bo_table=03_4&wr_id=854&sca=F

find에다가 -exec 옵션을 붙이면 무엇이든 할 수 있습니다.

확장자 일괄변경
find . -name *.php -exec rename .sas .mtml {} \;

파일내용 찾기
find . -type f -print | xargs egrep -i "expression"

파일내용 바꾸기
find . -name *.* -exec perl -p -i -e 's/old/new/g' {} \;

일괄삭제
find . -name *.bak -exec rm -rf {} \;  


유닉서 08-04-21 14:15
find ./ -print | xargs grep asdf $1 

asdf 라는 문자가 들어간 파일 찾아서 뿌려주기
유닉서 08-04-21 14:44
# find . -exec grep -l "문자열" {} \; -exec mv {} ./temp_dir \; 

 어떤 문자가 들어간 파일을 찾아서 특정 디렉토리에 이동시키기 
아쉬운데로 쓸만함.
유닉서 08-04-21 14:45
문자열찾기 방법 1 - 영어만 주로 가능 
# grep -rw "찾는문자열" ./ 

문자열찾기 방법 2 - 대/소문자 구분 안하고 검색 
# grep -i -l "찾는문자열" * -r 2> /dev/null 

문자열찾기 방법 3 - 한글, 영어 모두 가능 
# find . -exec grep -l "찾는문자열" {} \; 2>/dev/null 

문자열찾기 방법 4 - 한글,영어, 대소문자 안가리고 검색 
# find . -exec grep -i -l "찾을문자열" {} \; 2>/dev/null 

문자열찾은 후 치환 
# find . -exec perl -pi -e 's/찾을문자열/바꿀문자열/g' {} \; 2>/dev/null 

파일명 찾기 
# find / -name 파일명 -type f 

파일명 찾기(대소문자 구별없음) 
# find / -iname 파일명 -type f 

디렉토리 찾기 
# find / -name 파일명 -type d 

디렉토리 찾기(대소문자 구별없음) 
# find / -iname 파일명 -type d 

특정 사용자 소유의 모든 파일을 찾을때는? 
# find / -user "사용자 ID" -print 

두세가지 문자열을 동시에 찾아야 할때는 egrep을 쓰면 아주 편합니다. 
예를 들어 
만약 그냥 grep으로 문자열1,2 를 찾으려면 
ps -ef | grep 문자열1; ps -ef | grep 문자열2 
와 같이 해야하는것을 egrep를 이용하면 

ps -ef | grep '문자열1|문자열2' 
와 같이 간단해집니다. 

# egrep '(pattern1|pattern2|pattern3)' file.txt
유닉서 08-04-21 14:46
"파일명 찾기" 


find . -name "찾는파일명" -print 

  

. : 찾는 위치 

(현재위치에서 하부 디렉토리에서 찾을 경우 . 사용) 

( root에서 찾으려면 /를 입력함.) 

(절대 경로 예: /home/vanran 하부 폴더에서 찾으려면 find /home/vanran -name "찾는파일명" -print ) 




"find 와 grep 으로 특정 문자열을 찾는 방법" 

현재 디렉토리에서 하위 디렉토리를 포함하여 검색어를 검색할때 
find . -type f -print | xargs grep "string" 

현재 디렉토리 위치에서 하위 디렉토리를 포함하여 string 이란 문자열을 포함한 파일 검색 
find . -type f | xargs grep "string" 

find . | xargs grep "string"




출처 : http://byeonely.tistory.com/tag/Linux

find [경로] [옵션] [옵션조건]...


-exec
 옵션 : find 명령어로 찾은 결과 대상에 대하여 원하는 명령어를 적용 시킬 수 있게 해줍니다.


형식)
-exec [명령어] {} \;



문제) 
/usr/local/src 에 있는 HelloWorld.txt 파일을 찾아서 이 텍스트 파일의 내용을 /usr/local/src 의 위치에 new_HelloWorld.txt 파일로 생성시켜라.

# find /usr/local/src -name HelloWorld.txt -exec cat {} > /usr/local/src/new_HelloWorld.txt \;
# cat /usr/local/src/HelloWorld.txt     // 원본 텍스트파일 보기
# Hello World~!
# cat /usr/local/src/new_HelloWorld.txt    // find 명령어 -exec 옵션으로 생성한 텍스트 파일
# Hello World~!  // 원본 파일과 새로 생성된 파일의 내용이 같다


위 첫 번째 명령문으로 HelloWorld.txt 파일의 내용이 new_HelloWorld.txt 파일로 출력(복사)되었습니다.  


-exec cat {} > /usr/local/src/new_HelloWorld.txt \;


-exec 옵션 다음에 실행 할 명령어를 주고 "{}" 는 앞에 find 명령어로 찾은 결과 대상을 뜻 합니다. cat 명령어에서 ">" 를 이용하여 왼쪽 대상의 내용을 오른쪽으로 출력한다는 것을 명시합니다. 마지막에 "\;" 은 -exec 옵션과 짝을 이루어 옵션의 끝을 의미합니다. -exec ~ \; 형식이겠죠? ㅎㅎ
find로 찾은 대상을 "{}" 로 표현하기 때문에 결과 대상에 대해 얼마든지 다양한 명령문을 실행 시킬 수 있을 것입니다.

실제 리눅스를 하시면서 유용하게 사용하실 수 있을 것입니다. ^^



반응형
Posted by Real_G