grep과 cp는 "재귀"를 동일하게 취급합니까?

grep과 cp는 "재귀"를 동일하게 취급합니까?

grep. cp​어쩌면 내가 사용하는 방식이 다를 수도 있습니다.

이런 점에서 grep'재귀'는 다르게 해석되는 것 같습니다 cp. 그렇죠? (내 질문)

내 말에 따르면질문SO에서 이것을 찾아보는 중...

일치하는 문자열을 포함하는 파일의 경우 grep:

./file1.js
./file2.php
./inc/file3.js
./inc/file4.php
./inc.php/file5.php
grep -R "find me" *.php

반품:

./file2.php
./inc.php/file5.php

... grep".php"를 포함하는 디렉터리와 파일을 일치시키려고 하기 때문입니다.

그러나 cp재귀 복사를 사용하는 경우 다음과 같이 말합니다.

cp -r inc/* ~/mywork/

이름에 "inc"가 포함되어 있는지 여부에 관계없이 숨겨진 파일은 아니지만 "inc" 폴더의 파일과 모든 디렉터리 등이 복사됩니다.

grep"재귀"의 의미 와 의미가 서로 다른가요 cp, 아니면 "재귀"를 동일하게 취급합니까? 다른 경로/파일 매개변수가 어떻게 동일한 방식 으로 해석되는지 이해하도록 도와줄 수 있습니까 cp?grep

답변1

주문 grep,

grep -R "find me" *.php

...파일 이름 글로빙 패턴이 포함되어 있습니다. *.php.이것은 실행되기 전에 쉘에 의해 확장되므로 grep실행될 때 실제 명령은 다음과 같을 수 있습니다.

grep -R "find me" file1.php file2.php inc.php

...이것은 inc.php디렉토리 이름입니다.

그런 다음 grep유틸리티는 제공된 파일에서 사용자가 제공한 표현식을 검색합니다. 명령줄에 언급된 디렉토리에 대해 검색합니다.모두내용이 표현식과 일치하는 파일 디렉터리 아래의 파일 및 하위 디렉터리입니다. 즉 inc.php/subdir/README, 파일에 문자열이 포함되어 있으면 일치하는 항목을 찾을 수 있습니다 find me.

간단히 말해서, 주어진 옵션에 따라 명령줄에 지정된 각 이름을 (재귀적으로) 처리합니다(그 안의 일치하는 줄 검색).

cp명령은 재귀 작업과 동일한 방식으로 작동합니다.

cp -r inc/* ~/mywork/

쉘은 위 명령을 다음과 같이 확장합니다.

cp -r inc/file1 inc/file2 inc/dir1 inc/dir2 /home/myself/mywork/

그런 다음 유틸리티는 cp개별적으로 명명된 각 파일이나 디렉터리를 대상 디렉터리에 반복적으로 복사합니다.

즉, 명령줄에 지정된 모든 이름은 지정된 옵션에 따라 처리(대상에 복사)(재귀적으로)됩니다.


추가 참고 사항:

  • 재귀 검색 지원은 grep비표준 확장입니다.

  • 대시로 시작하는 이름으로 확장될 수 있는 파일 이름 와일드카드 패턴은 명령줄 옵션과의 혼동을 피하기 위해 주의해서 처리해야 합니다. grep따라서 귀하의 명령은 다음과 같이 더 안전하게 작성됩니다.

    grep -R -- "find me" *.php
    

    또는

    grep -R -e "find me" -- *.php
    

    ... --옵션과 해당 인수를 옵션이 아닌 피연산자와 분리합니다. 와일드카드 패턴이 string 으로 시작하는 항목으로 확장된다는 것이 보장되기 때문에 귀하의 cp명령에는 이러한 문제가 없습니다 inc/.

관련 정보