find 에 대한 옵션은 다음과 같다.
TAG: find option find usage find 옵션
find [OPTION...] [PATH] [EXPRESSION...]
OPTION
-P : 심볼릭 링크를 따라가지 않고, 심볼릭 링크 자체 정보 사용.
-L : 심볼릭 링크에 연결된 파일 정보 사용.
-H : 심볼릭 링크를 따라가지 않으나, Command Line Argument를 처리할 땐 예외.
-D : 디버그 메시지 출력.
EXPRESSION
-name : 지정된 문자열 패턴에 해당하는 파일 검색.
-empty : 빈 디렉토리 또는 크기가 0인 파일 검색.
-delete : 검색된 파일 또는 디렉토리 삭제.
-exec : 검색된 파일에 대해 지정된 명령 실행.
-path : 지정된 문자열 패턴에 해당하는 경로에서 검색.
-print : 검색 결과를 출력. 검색 항목은 newline으로 구분. (기본 값)
-print0 : 검색 결과를 출력. 검색 항목은 null로 구분.
-size : 파일 크기를 사용하여 파일 검색.
-type : 지정된 파일 타입에 해당하는 파일 검색.
-mindepth : 검색을 시작할 하위 디렉토리 최소 깊이 지정.
-maxdepth : 검색할 하위 디렉토리의 최대 깊이 지정.
-atime : 파일 접근(access) 시각을 기준으로 파일 검색.
-ctime : 파일 내용 및 속성 변경(change) 시각을 기준으로 파일 검색.
-mtime : 파일의 데이터 수정(modify) 시각을 기준으로 파일 검색.
grep
grep [OPTION...] PATTERN [FILE...]
-E : PATTERN을 확장 정규 표현식(Extended RegEx)으로 해석.
-F : PATTERN을 정규 표현식(RegEx)이 아닌 일반 문자열로 해석.
-G : PATTERN을 기본 정규 표현식(Basic RegEx)으로 해석.
-P : PATTERN을 Perl 정규 표현식(Perl RegEx)으로 해석.
-e : 매칭을 위한 PATTERN 전달.
-f : 파일에 기록된 내용을 PATTERN으로 사용.
-i : 대/소문자 무시.
-v : 매칭되는 PATTERN이 존재하지 않는 라인 선택.
-w : 단어(word) 단위로 매칭.
-x : 라인(line) 단위로 매칭.
-z : 라인을 newline(\n)이 아닌 NULL(\0)로 구분.
-m : 최대 검색 결과 갯수 제한.
-b : 패턴이 매치된 각 라인(-o 사용 시 문자열)의 바이트 옵셋 출력.
-n : 검색 결과 출력 라인 앞에 라인 번호 출력.
-H : 검색 결과 출력 라인 앞에 파일 이름 표시.
-h : 검색 결과 출력 시, 파일 이름 무시.
-o : 매치되는 문자열만 표시.
-q : 검색 결과 출력하지 않음.
-a : 바이너리 파일을 텍스트 파일처럼 처리.
-I : 바이너리 파일은 검사하지 않음.
-d : 디렉토리 처리 방식 지정. (read, recurse, skip)
-D : 장치 파일 처리 방식 지정. (read, skip)
-r : 하위 디렉토리 탐색.
-R : 심볼릭 링크를 따라가며 모든 하위 디렉토리 탐색.
-L : PATTERN이 존재하지 않는 파일 이름만 표시.
-l : 패턴이 존재하는 파일 이름만 표시.
-c : 파일 당 패턴이 일치하는 라인의 갯수 출력.
Find 와 Grep 의 Combination 을 소개한다.
> find로 찾은 파일들에 대해서만 grep 을 수행하기 위한 방법 소개
1. 표준 입력을 이용하는 방법
find . -name "[FILE]" | xargs grep --color=auto -En "[PATTERN]"
2. find 의 exec 옵션을 이용하는 방법
find . -name "[FILE]" -exec grep "[PATTERN]" '{}' \;
BM이 만들어 사용하는 스크립트를 소개한다.
이는 .bashrc 에서 실행가능한 스크립트들을 모아둔 ~/bin 폴더에 담아두어 주로 사용하는 shell command 이다.
따라서 export PATH=~/bin:$PATH 를 .bashrc 에 적어두면 매번 사용하기 편리하다.
#!/bin/bash
source ~/bin/print.sh
USE_TIME=false
function usage {
echo " /**"
echo " * ffgrep"
echo " **/ made by Martin Hyun"
echo "";
echo " Usage: need two args, always '*' added prefix";
echo " bp) ffgrep [file pattern] [grep pattern]";
echo " ex) ffgrep .mk CONFIG_I2C";
echo " mean)=> ffgrep '*.mk' CONFIG_I2C (see '*'added)";
echo "";
exit
}
if [ -z $1 ];
then
usage
elif [ -z $2 ];
then
usage
else
CMD="find . -name '*${1}' | xargs grep --color=auto -En '${2}'"
echo $CMD
eval $CMD
#find . -name '${1}' | xargs grep --color=auto -n "${2}"
fi
사용방법은 ffgrep 을 쳐보면 바로 나온다
martin@VMI:~/bin$ ffgrep
/**
* ffgrep
**/ made by Martin Hyun
Usage: need two args, always '*' added prefix
bp) ffgrep [file pattern] [grep pattern]
ex) ffgrep .mk CONFIG_I2C
mean)=> ffgrep '*.mk' CONFIG_I2C (see '*'added)
수많은 Makefile 중에서 LD 라는 항목을 찾는다고 예를들면 다음과 같이 입력하면 된다.
ffgrep Makefile LD
<ffgrep 결과예시>
./u-boot-2014.07/board/sandburst/metrobox/Makefile:12:ccflags-y += -DBUILDUSER='"$(shell whoami)"'
./u-boot-2014.07/board/sandburst/karef/Makefile:13:ccflags-y += -DBUILDUSER='"$(shell whoami)"'
./u-boot-2014.07/board/xilinx/zynq/Makefile:11:obj-$(CONFIG_SPL_BUILD) += \
./u-boot-2014.07/board/compulab/cm_t54/Makefile:10:obj-$(CONFIG_SPL_BUILD) += mux.o spl.o
./u-boot-2014.07/board/compulab/cm_t335/Makefile:10:obj-$(CONFIG_SPL_BUILD) += mux.o spl.o
./u-boot-2014.07/board/sandisk/sansa_fuze_plus/Makefile:8:ifndef CONFIG_SPL_BUILD
./u-boot-2014.07/board/siemens/pxm2/Makefile:14:ifdef CONFIG_SPL_BUILD
./u-boot-2014.07/board/siemens/pxm2/Makefile:19:ifndef CONFIG_SPL_BUILD
./u-boot-2014.07/board/siemens/draco/Makefile:14:ifdef CONFIG_SPL_BUILD
./u-boot-2014.07/board/siemens/draco/Makefile:19:ifndef CONFIG_SPL_BUILD
./u-boot-2014.07/board/siemens/rut/Makefile:14:ifdef CONFIG_SPL_BUILD
./u-boot-2014.07/board/siemens/rut/Makefile:19:ifndef CONFIG_SPL_BUILD
./u-boot-2014.07/board/BuR/tseries/Makefile:10:ifeq ($(CONFIG_SPL_BUILD),y)
./u-boot-2014.07/board/BuR/kwb/Makefile:10:obj-$(CONFIG_SPL_BUILD) += mux.o
./u-boot-2014.07/board/isee/igep0033/Makefile:9:ifdef CONFIG_SPL_BUILD
./u-boot-2014.07/board/ti/sdp4430/Makefile:10:ifndef CONFIG_SPL_BUILD
이런분들에게 추천한다.
- 주로 사용하는 명령들이 복잡하고 일일치 typing 이 어려울때
- 자주 사용하는 명령이 외워지지 않을때
특정파일에서 패턴을 찾는 FIND | GREP 명령이 단순화되는것을 보여준다.
FIND/GREP 의 다음의 명령을 보자.
ffgrep 으로 단순화된 명령을 보자.
Linux shell 에서 find & grep 과 ffind 의 결과는 동일하다.
(1) find & grep
ex) find . -name "*.sh" | xargs grep --color=auto -En "time"
(2) ffgrep
ex) ffgrep .sh time
위처럼 Type 이 매우 줄기때문에,
직접 타이핑 하며 기쁨을 느낄수있는 사람도 있다고 생각되지만
혹시나 실수로 인해 개발의 지연을 야기할수있음을
그리고 단순한 command 로 시간적 효율을 취하고싶은 분들께 추천 드린다.
'Linux > Shell Script' 카테고리의 다른 글
Swap script (0) | 2021.12.24 |
---|---|
xxd 를 이용한 grep command 만들기 (0) | 2021.12.24 |
댓글