간단히 말해서 거의 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 옵션으로 처리됩니다.