안녕하세요~ 어느 폴더에 파일이 약.. 10000개 정도 들어있습니다. 그 파일들중 "어쩌고" 라는 문자열이 들어있으면 걍 지워버리고 싶은데... 2000개정도가 안되면rm -f `grep -l "어쩌고" *`로 해결했었는데... 2000개정도가 넘어가면 인자의 수가 넘 많다고 하네요. 어떻게 방법이 없을까요? 도움말씀부탁드리겠습니다.
rm -f `grep -l "어쩌고" *`
find 의 -exec 옵션을 보세요 ~~~
<어떠한 역경에도 굴하지 않는 '하양 지훈'>
#include <com.h> <C2H5OH.h> <woman.h> do { if (com) hacking(); if (money) drinking(); if (women) loving(); } while (1);
아마도,
$ 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
파일이 많을 경우 쉘의 * 는 제 기능을 하지 못합니다. 서지훈님의 말씀대로 find --exec를 활용하셔야 합니다.
아차차 실수, 인수 목록이 문제가 되는 부분이 rm -f 가 아니라 grep 이겠군요. grep xxx * 는 안되겠고 파일 단위로 처리해야 할 것 같네요.
for f in *; do grep -q xxx $f && rm -f $f; done
이면 될까요? :-) 혹시 파일 이름에 공백 등이 들어있다면 조금 더 신경써주고요.
그런데 find 명령은 이 경우에 사용하기 적합하지 않은 것이, 원하는 것이 파일 이름 등을 이용한 조건 검색이 아닌 파일 내용에 대한 검색이기 때문에... 혹시 저만 모르고 있는 "내용 검색" 옵션이 find에 있었나요? :-)
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 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 명령을 사용한 것과 별반 다르지 않습니다. (내부 구현에 따라 불필요한 루프를 더 돌고있을지는 모르겠습니다.)
제가 얘기했던 "적합하지 않다"는 의미는, 그 명령으로부터 얻을 수있는 "효과"가 없다는 뜻이었습니다. :-)
텍스트 포맷에 대한 자세한 정보
<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]
find 의 -exec 옵션을 보세요 ~~~ <어떠한 역경에
find 의 -exec 옵션을 보세요 ~~~
<어떠한 역경에도 굴하지 않는 '하양 지훈'>
#include <com.h> <C2H5OH.h> <woman.h>
do { if (com) hacking(); if (money) drinking(); if (women) loving(); } while (1);
Re: 폴더의 파일에 내용을 검색해서 지우려고 합니다.
아마도,
$ grep xxx * | while read name; do rm -f $name; done
이렇게 하면 될 것 같은데요, 또는 그나마 파일이 많지 않을 때는...
등으로 하는 것도 가끔은 편하죠.
--
"The love you take is equal to the love you make." The End, by Beatles
파일이 많을 경우 쉘의 * 는 제 기능을 하지 못합니다.서지훈님의 말
파일이 많을 경우 쉘의 * 는 제 기능을 하지 못합니다.
서지훈님의 말씀대로 find --exec를 활용하셔야 합니다.
[quote="unicozy"]파일이 많을 경우 쉘의 * 는 제 기능을
아차차 실수, 인수 목록이 문제가 되는 부분이 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
[quote="sio4"][quote="unicozy"]파일이 많을 경우
이렇게 하면 되지 않을까요?
인생의 무게를 느껴라. 아는 만큼 보이는게다.
[quote="oldbell"][quote="sio4"][quote="u
물론 가능합니다. :-) 다만, 이 때 find 명령의 쓰임은 ls 명령을 사용한 것과 별반 다르지 않습니다. (내부 구현에 따라 불필요한 루프를 더 돌고있을지는 모르겠습니다.)
제가 얘기했던 "적합하지 않다"는 의미는, 그 명령으로부터 얻을 수있는 "효과"가 없다는 뜻이었습니다. :-)
--
"The love you take is equal to the love you make." The End, by Beatles
댓글 달기