여러 PHP 파일에서 텍스트 문자열을 어떻게 검색합니까?

여러 PHP 파일에서 텍스트 문자열을 어떻게 검색합니까?

간단히 말해서 거의 800,000개의 PHP 파일이 있는 폴더를 얻었습니다. 각 파일에서 문자열을 검색하고 해당 파일에 문자열이 있으면 파일이 다른 디렉터리로 복사됩니다.

터미널에서 가능한가요?

지금까지 나는 다음을 얻었습니다:

grep -i -n -r 'ppr-1792' * | cp $1 move_to_here

그러나 이것은 분명히 작동하지 않습니다. $1은 일치하는 텍스트가 포함된 파일 이름이어야 합니다.

어떻게 해야 하나요?

답변1

for 루프를 사용하여 grep의 반환 코드를 테스트하거나 grep -c(일치 횟수 계산)을 사용하여 일치 횟수가 1보다 큰지 확인할 수 있습니다.

예를 들어

for i in *
do
    grep -i -n 'Power' "$i"

    if [ "$?" -eq 0 ]
    then
            cp "$i" mvd
    fi
done

답변2

멋진 하나의 라이너로 쉽게 할 수 있습니다.

grep -l -i -r -Z pattern | xargs -0 -I source cp source /target

일부는 작동 방식에 대해 설명합니다. Grep의 -l 옵션은 파일에 일치하는 항목이 있으면 파일 이름만 인쇄하므로 복사할 파일 목록을 생성합니다. Xargs 명령은 각 복사 명령에 대한 명령을 구성하고 실행합니다. Xargs는 "source"라는 인수를 표준 입력에서 읽은 파일 이름으로 바꿉니다. 파일 이름의 공백 및 기타 재미있는 문자는 -Z 및 -0 옵션으로 처리됩니다.

관련 정보