반응형
file count
> ls -l | grep -v ^l | wc -l
directory size
>du -h --apparent-size
> find . -name *.mp3 -exec rm -rf {} \;
> find . -name *.mp3 -exec mv -r {} /media/sumin/Data/Music/copied/ \;
>find . ! \( -path './Music/copied/*' -prune \) -name "*.mp3"
> find . ! \( -path './Music/copied/*' -prune \) -name "*.mp3" -exec rm {} \;
빈 디렉토리 삭제 depth -1
>find . -type d -empty -exec rm -rf {} \;
>find . -name *.chm -exec mv -r {} /media/sumin/Data/Ebook-chm \;
>모든 종류의 파일 타입 찾기....
find . -name *.doc -exec mv {} /media/sumin/Data/Doc-doc/ \;
find . ! \( -path './Ebook/' -prune \) -name *.pdf -exec mv {} /media/sumin/Data/Ebook/ \;
find . ! \( -path './Music/copied/' -prune \) -name "*.mp3"
find . -name *.hwp -exec mv {} /media/sumin/Data/Doc-hwp/ \;
find . -type d -empty -exec rm -rf {} \;
제 목 : find명령에서 특정 디렉토리 제외하고 찾기(exclude) 작성자 : 좋은진호(truefeel, http://coffeenix.net/ ) 작성일 : 2009.7.3(금) find 명령을 할 때, 특정 디렉토리 제외하고 find하는 방법은 없느냐고 주위분이 물어오셨다. 개인적으로는 find에서 특정 디렉토리를 exclude하는 것 대신에 디렉토리를 나열하는 방법을 사용했다. 그러나 디렉토리 갯수가 많고, 같은 depth의 디렉토리가 아니고 하위 특정 디렉토리 몇개를 exclude해야한다면? 옵션을 활용할 수 밖에 없을 것이다. man페이지를 확인해보니 -prune옵션이 있다. -prune 옵션은 찾아낸 것이 디렉토리이면 그 디렉토리내에는 find하지 않는다.
1. 예제로 살펴보기 [예제 1] 2009가 포함된 파일을 찾는다. 단 파일명이 디렉토리에 해당되면 해당 디렉토리 이하는 찾지 않는다. $ find (전체 보기) ./ ./check/check_list_2008_12.php ./check/check_list_2009_05.php ./check/check_list_2009_06.php ./2007_10_mobile ./2008_01_highlight ./2008_01_highlight/view.pl ./2008_01_highlight/view.sh ./2009_03_MSIE8 ./2009_03_MSIE8/get_MSIE8.sh ./2009_05_apache ./2009_05_game ./2009_05_game/2009_05.log $ find . -name "*2009*" -prune ./check/check_list_2009_05.php ./check/check_list_2009_06.php ./2009_03_MSIE8 ./2009_05_apache ./2009_05_game ./2009_05_game/ 디렉토리 이하에 2009_05.log 파일이 있지만, -prune옵션으로 해당 디렉토리 이하는 찾지 않았다. [예제 2] ./foo/bar 디렉토리는 제외하고, *.txt 파일을 찾아라. $ find . ! \( -path './foo/bar' -prune \) -name "*.txt" $ find . ! \( -type d -path './foo/bar' -prune \) -name "*.txt" (보다 정확한 표현) [예제 3] ./foo/bar 디렉토리와 ./coffeenix/temp 디렉토리는 제외하고, *.bak 파일을 찾아라. $ find . ! \( \( -path './foo/bar' -o -path './coffeenix/temp' \) -prune \) -name "*.bak" $ find . ! \( \( -type d -path './foo/bar' -o -path './coffeenix/temp' \) -prune \) -name "*.bak" (보다 정확한 표현) [예제 4] ./2008로 시작하는 디렉토리는 제외하고, .*.bak 파일을 찾아라. $ find . ! \( -path './2008*' -prune \) -name "*.bak" $ find . ! \( -type d -path './2008*' -prune \) -name "*.bak" (보다 정확한 표현) -path 대신 -wholename 옵션을 사용해도 된다.
2. 참고자료 * find manpage http://unixhelp.ed.ac.uk/CGI/man-cgi?find * 유용한 find 명령어 예 모음 (2003, 글 좋은진호) http://coffeenix.net/board_view.php?bd_code=36 |
반응형
'etc' 카테고리의 다른 글
좋은 API 디자인하기, 왜 그것이 중요한가? (0) | 2013.04.09 |
---|---|
전자파 차단 콘센트 (0) | 2013.04.08 |
English writing teacher (0) | 2013.04.06 |
Writing #1 Introduction (0) | 2013.04.01 |
chocolate (0) | 2013.04.01 |