find 및 grep을 사용하여 파일을 검색한 후 삭제하는 방법은 무엇입니까?

find 및 grep을 사용하여 파일을 검색한 후 삭제하는 방법은 무엇입니까?

특정 파일을 검색하려면 다음 명령을 사용합니다.

find . -type f -name Client.php | xargs grep WARNING

삭제 명령이 발생하기 전에 사용자에게 메시지가 표시되도록 삭제 명령을 추가하는 방법을 모르겠습니다.

답변1

xargs여기에서 파이프를 연결하여 조회에 다시 참여할 수 없으며 find별도로 명령을 실행할 수 있습니다.grep

이것-exec기초적인하나 이상의 파일에 대해 명령을 실행합니다. 명령 자체가 성공적인 결과로 종료되는 경우에만 성공하고 오른쪽의 피연산자를 계속 처리하므로

find . -type f -name Client.php -exec grep -q WARNING {} \; -exec echo {} \;

~ 할 것이다인쇄하다"WARNING"을 포함하는 "Client.php"라는 이름의 모든 파일에 대한 경로입니다. 초를 변경 -exec ... \;하여 -delete제거하거나 명령을 변경하여 사용 rm하거나 mv처리할 수 있습니다.


세미콜론은 한 번에 하나의 파일만 검사하도록 보장하며 성공 시 다음과 같은 실제 동작을 얻습니다.

기본 표현식에 <세미콜론>이 붙은 경우 유틸리티는유틸리티 이름각 경로 이름에 대해 한 번 호출되어야 하며 유틸리티가 종료 상태로 0 값을 반환하는 경우 기본 경로는 true로 평가되어야 합니다.

전체가 -exec ... \;하나의 블록이므로 를 사용하는 경우 명령 -delete은 물론 세미콜론도 제거해야 합니다 .-exec


위의 명령을 실행하는 것이 좋습니다첫 번째그리고 실제로 삭제하기 전에 원하는 파일만 포함되어 있는지 확인하세요. 그러나 요청하지 않는 완전한 삭제 명령은 다음과 같습니다.

find . -type f -name Client.php -exec grep -q WARNING {} \; -delete

조심해서 진행해라!

답변2

스크립트를 작성할 수 있습니다:

#!/bin/bash

FINDFILE=Client.php
if [[ $(find . -type f -name $FINDFILE | xargs grep "WARNING") ]] ; then
rm -i $FINDFILE
else
echo "File with warning not found."
fi

/usr/local/bin, chmod +x /usr/local/bin/scriptname에 스크립트를 배치합니다.
이제 언제 어디서나 할 수 있습니다.(.sh 확장자를 사용하지 않는 것이 가장 좋습니다)

관련 정보