
다른 사람의 코드 기반으로 작업할 때 자주 사용하는 명령을 알고 있습니다. 여기에 예가 있습니다.
find ./ -name "*.php" | xargs grep "my_awesome_function("
나는 이미 여기의 각 명령에 대한 문서를 find
, pipe
및 from으로 읽었습니다 xargs
.grep
http://www.computerhope.com/unix.htm
그러나 나는 여전히 이 명령이 현재 디렉토리 아래의 모든 PHP 파일을 검색한 다음 그 중 "my_awesome_function(" 문자열이 포함된 파일을 찾는 방법)을 완전히 이해하지 못합니다. 사전 파이프 부분이 어떻게 작동하는지 이해하지만 파이프 후에는 이해가 사라집니다. . 각 파일이 grep 명령에 대한 인수처럼 전송된다는 것을 알았습니다. 여기서 무슨 일이 일어나고 있는지 설명해 주실 수 있나요?
답변1
find
마지막 부분 없이 명령 을 실행해 보십시오 .
find ./ -name "*.php"
당신이 보게 될 것은 파일 이름 목록이며, 모두 .php
.
이제 xarg
명령은 파이프에서 이러한 파일 이름을 모두 읽고 여러 파일 이름을 가져온 다음( option 을 사용하여 개수를 설정할 수 있음 -n 2
) 해당 이름으로 인수를 호출합니다. 따라서 find의 출력이 이고 최대 두 개의 파일을 함께 그룹화하는 경우 file1.php file2.php file3.php
( xarg
또는 를 사용하여 강제로 그룹화하는 경우 xargs -n 2
) 다음을 호출합니다.
grep "my_awesome_function(" file1.php file2.php
grep "my_awesome_function(" file3.php
결과적으로 출력이 생성됩니다. 다음을 삽입하면 실제로 무슨 일이 일어나고 있는지 확인할 수 있습니다 echo
.
find ./ -name "*.php" | xargs echo grep "my_awesome_function("
또한 그룹화를 가지고 놀아보십시오.
find ./ -name "*.php" | xargs -n 2 echo grep "my_awesome_function("