grep -R(대문자)과 -r(소문자)의 차이점

grep -R(대문자)과 -r(소문자)의 차이점

에 들어가서 /etc/apache2/입력 grep -rl 'LoadModule php' ./*하면 ./mods-available/php7.0.load. 그럼 바꿔보면 rR겠지

./mods-available/php7.0.load
./mods-enabled/php7.0.load

둘 다 일반 디렉토리입니다. -rgrep이 PWD의 모든 파일/디렉터리를 반복하게 할 것으로 예상됩니다 . 무슨 일이야 -r? 항상 -R이 시점에서 사용하려고 합니다 .

답변1

에 따르면grep 맨페이지:

-r, --재귀
               명령줄에 있는 경우에만 기호 링크를 따라 각 디렉터리 아래의 모든 파일을 반복적으로 읽습니다. 파일 피연산자가 제공되지 않으면 grep은 작업 디렉토리를 검색합니다. 이는 -d recurse 옵션과 동일합니다.

-R, --역참조-재귀
               각 디렉터리 아래의 모든 파일을 반복적으로 읽습니다. -r과 달리 모든 기호 링크를 따릅니다.

예:

폴더가 있어요시험파일이 있는 곳1.txt.2.txt에 대한 심볼릭 링크입니다.1.txt출력은 ls -l test다음과 같습니다.

-rw-r--r-- 1 kulfy kulfy 15 Jun 12 21:53 1.txt
lrwxrwxrwx 1 kulfy kulfy  5 Jun 12 21:53 2.txt -> 1.txt

내용1.txt이다:

This is a file.

내가 검색하고 싶다면"파일"내부 파일의 문자열시험폴더를 선택하고 다음을 실행합니다.

grep "file" test

오류가 발생합니다.

grep: test: Is a directory

하지만 내가 그렇게 한다면:

grep -R "file" test

나는 출력을 얻습니다 :

test/2.txt:This is a file
test/1.txt:This is a file

반면에 다음을 실행하면:

grep -r "file" test

나는 출력을 얻습니다 :

test/1.txt:This is a file

여기서는 모든 파일을 검사하라고 명시적으로 언급하지 않았습니다. 그래서 플래그를 사용할 때 R심볼릭 링크(여기2.txt)이 존중되고 출력이 생성되었습니다. 그런데 플래그를 사용하면 r스캔하라는 언급을 하지 않았기 때문에 심볼릭 링크가 무시되었습니다.2.txt또한.

답변2

GNU grep에서v2.11-8 이상,다음과 같이 호출되는 경우-r 심볼릭 링크 제외명령줄에 지정되지 않으며 -R(를 사용하여 호출할 때 이를 포함합니다.원천).

에서매뉴얼 페이지( man grep):

-r, --recursive 명령줄에 있는 경우에만 기호 링크를 따라 각 디렉터리 아래의 모든 파일을 반복적으로 읽습니다. 파일 피연산자가 제공되지 않으면 grep은 작업 디렉토리를 검색합니다. 이는 -d recurse 옵션과 동일합니다.

-R, --dereference-recursive 각 디렉터리 아래의 모든 파일을 반복적으로 읽습니다. 모든 심볼릭 링크를 따르십시오.같지 않은-r.

관련 정보