폴더의 파일에 내용을 검색해서 지우려고 합니다.

ironiris의 이미지

안녕하세요~
어느 폴더에 파일이 약.. 10000개 정도 들어있습니다.
그 파일들중 "어쩌고" 라는 문자열이 들어있으면 걍 지워버리고 싶은데...
2000개정도가 안되면rm -f `grep -l "어쩌고" *`로 해결했었는데...
2000개정도가 넘어가면 인자의 수가 넘 많다고 하네요.
어떻게 방법이 없을까요?
도움말씀부탁드리겠습니다.

서지훈의 이미지

find 의 -exec 옵션을 보세요 ~~~

<어떠한 역경에도 굴하지 않는 '하양 지훈'>

#include <com.h> <C2H5OH.h> <woman.h>
do { if (com) hacking(); if (money) drinking(); if (women) loving(); } while (1);

sio4의 이미지

ironiris wrote:
안녕하세요~
어느 폴더에 파일이 약.. 10000개 정도 들어있습니다.
그 파일들중 "어쩌고" 라는 문자열이 들어있으면 걍 지워버리고 싶은데...
2000개정도가 안되면rm -f `grep -l "어쩌고" *`로 해결했었는데...
2000개정도가 넘어가면 인자의 수가 넘 많다고 하네요.
어떻게 방법이 없을까요?
도움말씀부탁드리겠습니다.

아마도,

$ grep xxx * | while read name; do rm -f $name; done

이렇게 하면 될 것 같은데요, 또는 그나마 파일이 많지 않을 때는...

$ rm -f `grep xxx [a-m]*`
$ rm -f `grep xxx [o-z]*

등으로 하는 것도 가끔은 편하죠.

--
"The love you take is equal to the love you make." The End, by Beatles

unicozy의 이미지

파일이 많을 경우 쉘의 * 는 제 기능을 하지 못합니다.
서지훈님의 말씀대로 find --exec를 활용하셔야 합니다.

sio4의 이미지

unicozy wrote:
파일이 많을 경우 쉘의 * 는 제 기능을 하지 못합니다.
서지훈님의 말씀대로 find --exec를 활용하셔야 합니다.

아차차 실수, 인수 목록이 문제가 되는 부분이 rm -f 가 아니라 grep 이겠군요. grep xxx * 는 안되겠고 파일 단위로 처리해야 할 것 같네요.

for f in *; do grep -q xxx $f && rm -f $f; done

이면 될까요? :-) 혹시 파일 이름에 공백 등이 들어있다면 조금 더 신경써주고요.

그런데 find 명령은 이 경우에 사용하기 적합하지 않은 것이, 원하는 것이 파일 이름 등을 이용한 조건 검색이 아닌 파일 내용에 대한 검색이기 때문에... 혹시 저만 모르고 있는 "내용 검색" 옵션이 find에 있었나요? :-)

--
"The love you take is equal to the love you make." The End, by Beatles

oldbell의 이미지

sio4 wrote:
unicozy wrote:
파일이 많을 경우 쉘의 * 는 제 기능을 하지 못합니다.
서지훈님의 말씀대로 find --exec를 활용하셔야 합니다.

아차차 실수, 인수 목록이 문제가 되는 부분이 rm -f 가 아니라 grep 이겠군요. grep xxx * 는 안되겠고 파일 단위로 처리해야 할 것 같네요.

for f in *; do grep -q xxx $f && rm -f $f; done

이면 될까요? :-) 혹시 파일 이름에 공백 등이 들어있다면 조금 더 신경써주고요.

그런데 find 명령은 이 경우에 사용하기 적합하지 않은 것이, 원하는 것이 파일 이름 등을 이용한 조건 검색이 아닌 파일 내용에 대한 검색이기 때문에... 혹시 저만 모르고 있는 "내용 검색" 옵션이 find에 있었나요? :-)

이렇게 하면 되지 않을까요?

for i in `find ./ -exec grep -l "찾는 문자열" {} \;` ; do
	rm $i
done 

인생의 무게를 느껴라. 아는 만큼 보이는게다.

sio4의 이미지

oldbell wrote:
sio4 wrote:
unicozy wrote:
파일이 많을 경우 쉘의 * 는 제 기능을 하지 못합니다.
서지훈님의 말씀대로 find --exec를 활용하셔야 합니다.

아차차 실수, 인수 목록이 문제가 되는 부분이 rm -f 가 아니라 grep 이겠군요. grep xxx * 는 안되겠고 파일 단위로 처리해야 할 것 같네요.

for f in *; do grep -q xxx $f && rm -f $f; done

이면 될까요? :-) 혹시 파일 이름에 공백 등이 들어있다면 조금 더 신경써주고요.

그런데 find 명령은 이 경우에 사용하기 적합하지 않은 것이, 원하는 것이 파일 이름 등을 이용한 조건 검색이 아닌 파일 내용에 대한 검색이기 때문에... 혹시 저만 모르고 있는 "내용 검색" 옵션이 find에 있었나요? :-)

이렇게 하면 되지 않을까요?

for i in `find ./ -exec grep -l "찾는 문자열" {} \;` ; do
	rm $i
done 

물론 가능합니다. :-) 다만, 이 때 find 명령의 쓰임은 ls 명령을 사용한 것과 별반 다르지 않습니다. (내부 구현에 따라 불필요한 루프를 더 돌고있을지는 모르겠습니다.)

제가 얘기했던 "적합하지 않다"는 의미는, 그 명령으로부터 얻을 수있는 "효과"가 없다는 뜻이었습니다. :-)

--
"The love you take is equal to the love you make." The End, by Beatles

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.