2017년 9월 1일 금요일

리눅스 find 명령어 사용법 #2 - 검색결과 대상으로 2차 명령 실행(-exec 옵션)


어제 find 명령어를 가지고 여러가지 조건을 바탕으로 원하는 결과를 출력하는 방법에 대해 알아보았다.

( find 명령어에 대한 자세한 사용법은 여기 를 클릭하여 확인 가능하다 )

오늘은 find 명령어의 활용에 대해 정리해 보려 한다.

검색결과물들을 지우고 싶을 때가 있거나 또는 다른 디렉토리로 복사하여 모아둔다던지 하는 행위들이 필요할 수 있다.

예컨대, 디스크 파티션이 거의 Full 직전이어서 불필요한 파일을 찾아 지우고 싶은 경우.. 또는 PPT나 HWP 와 같은 문서 파일들만 모아서 다른 디렉토리로 이동시켜 보관하려는 경우가 해당된다 하겠다.

find 명령어를 이용해서 검색은 하겠다만.. 검색 결과의 파일들을 일일히 개별적으로 처리해야 한다면 불편함이야 말할 수 없을 것이다.

하지만 고맙게도 find 명령어에서 옵션으로 제공하는 "-exec" 를 이용하면 이러한 2차 작업을 손쉽고 간단히 처리할 수 있다.

먼저 -exec 옵션의 사용은 다음과 같이 한다.

사용법: find [디렉토리] [검색옵션] -exec [2차 수행 명령] {} \;

-exec 뒤에 붙는 것들을 간단히 설명하면..
우선 2차 수행 명령.. rm 이나 cp, mv 와 같은 리눅스 명령어이다.
두번째 '{}' 는 검색 결과의 파일리스트들을 대입하기 위한 옵션이다.
세번째는 명령어를 실행하라는 Do it 과 같은 명령으로 이해하면 좋다.

다음의 예를 놓고 설명을 하면..

예 : find / -name '*.txt" -exec rm -f {} \;

  1. find 명령어로 txt 확장자를 가진 파일을 검색한다.
  2. 검색결과로 파일들이 도출될때마다 -exec 다음 명령어를 실행한다.
    rm -f [검색결과 파일] 
a.txt b.txt ~~~ 와 같이 10개의 파일이 검색되었다고 하면.. 

rm -f a.txt 
rm -f b.txt
rm -f c.txt
.
.
.

이런식으로 검색결과가 끝날때까지 -exec 뒤의 명령어가 수행되어지는 것이다. 





백문이 불여일견 이라고..  직접 테스트를 해보자. 

자! 우선 다음과 같은 파일들을 준비했다.

  • 10개의 PDF 문서 파일
  • 1개의 동영상 파일 (500M 이상)



위 예로 든 상황 2개를 테스트 해 볼 것이다.



상황#1 PDF 문서파일을 모두 검색하여 Doc 디렉토리로 이동 시키기

먼저, 확장자가 PDF 인 파일들만 찾아 본다.
명령어 : find . -name '*.pdf'


위와 같이 10개의 PDF 문서가 정상적으로 검색되었다.
이제 이 파일들을 Doc 디렉토리로 이동시킨다.

명령어 : find . -name '*.pdf' -exec mv {} ./Doc \;


위 명령어에서 -exec 옵션 뒤 구문을 좀 살펴보자.
구문 : -exec mv {} ./Doc \;

검색된 결과가 1.pdf ~ 10.pdf 까지 총 10개이니까 검색결과를 기반으로 해석해 보면..
mv 1.pdf ./Doc
mv 2.pdf ./Doc
.
.
.
mv 10.pdf ./Doc

와 같이 명령어가 수행될것이라고 생각해 볼 수 있다.
그럼 결과는..



의도한 바와 같이 잘 처리되었음을 확인할 수 있다.





상황#2 500M 이상되는 AVI 영상 파일을 찾아 삭제하기


상황#1 과 마찬가지로.. 먼저 파일용량이 500M 이상되는 파일을 검색해 본다.
명령어 : find . -size 500M -name '*.avi'


500M 이상의 avi 파일이 잘 검색되었다.

이제 검색된 파일을 지워보자.
명령어 : find . -size 500M -name '*.avi' -exec rm -f {} \;

-exec 뒷부분을 좀 살펴보면..
test.avi 파일 하나가 검색되었으니.. {} 부분에 test.avi 를 대입한다. 그러면 아래와 같이...

rm -f test.avi  의 명령어가 같이 수행되어 파일삭제가 이루어진다. 

결과를 보면.. 



정상적으로 test.avi 파일이 삭제 되었음을 확인할 수 있다.

이렇듯.. -exec 옵션을 이용하면 검색 결과를 기반으로 다양한 2차 작업을 간단하게 수행할 수 있다.

역시나 리눅스에서 무료로 제공하는 find 명령어가 얼마나 강력한지를 여실없이 보여주는 시간이었다.

끝~

댓글 1개: