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/
.