grep 로 찾은 파일을 바로 지우는 방법..?

cguy의 이미지

리눅스 쉘상에서 예를 들어서 abc 라는 문자열이 포함된 파일을 찾아서

바로 지우는 방법이 없을까요?

a.txt
b.txt <- abc 문자열 포함
c.txt
d.txt <- abc 문자열 포함

파일들이 너무 많아서 지울수도 없고.

위의 예처럼 b.txt 와 d.txt 만 골라서 지우는 방법인데,

아시면 도움 주시면 진심으로 감사하겠습니다.

purewell의 이미지

$ rm -f `grep "찾고자 하는 문자열" * -l`

작은 따옴표는 키보드 ESC 키 아래에 있는 것으로,

표준출력을 argument로 바꿔줍니다.

_____________________________
언제나 맑고픈 샘이가...
http://purewell.biz

alfalf의 이미지

사족일지 모르지만
파일이 많으시다니 위의 스크립트가 문제가 될지 몰라 제가 하나더
올립니다.

ls | while read filename; do if grep -q "찾으려는 문자열" $filename; then rm -f $filename; fi; done

cdpark의 이미지

alfalf wrote:
사족일지 모르지만
파일이 많으시다니 위의 스크립트가 문제가 될지 몰라 제가 하나더
올립니다.

ls | while read filename; do if grep -q "찾으려는 문자열" $filename; then rm -f $filename; fi; done

이런 경우엔 xargs를 쓰면 됩니다.

xfmulder의 이미지

혹시 ls 를 쓰신다면

ls 대신 /bin/ls -1 을 써야 ls 가 alias 일때 문제가 안생길것 같습니다.

cdpark wrote:

ls | while read filename; do if grep -q "찾으려는 문자열" $filename; then rm -f $filename; fi; done

내 자식들도 나처럼 !!

alfalf의 이미지

파일 수가 너무 많다면

grep -l abc * | xargs rm

중 앞부분 "grep -l abc *"에서
bash: /bin/grep: Argument list too long과 같은 에러가 납니다.

jcly2의 이미지

find . -name [abc].* -print |xargs rm

하면 될 것같은데요..