하위 디렉토리까지 뒤져 특정파일의 내용을 replace하기
find . -name *.html | awk '{ print "cat "$1" | sed \"s/바꾸고싶은말/바뀔말/g\" >"$1 }' | sh

한가지 에러가 날수 있는 상황이 있습니다.

그것은 디스크가 100% 사용중일 경우에 해당합니다.

이럴경우 덩치가 큰 파일을 치환하면 파일의 중간이 짤릴수 있습니다.

손이 많이간건 즉 파일이 크단 말도 되는데, 이거만 확실히 날라 갔네요.

덕텍에 중요한것만 골라서 안되는구요.

이 작업을 하려면 꼭 백업을 받고 작업 하십시요.

근데 특수문자인경우는 예를들어서
// -> /*

일단 sed에서만.. 하면...
1. src = // => des /*
2. sed "s/////*/g"
쿼테이션 안이니까... \ 이걸 넣어 줘여 하고.. 따라서...
3. sed "s/\/\//\/*/g"
sed가 역쉬 awk 쿼테이션 안이에 있으니까... \를 한번식 더 넣어 주면..
4. awk '{ print "cat "$1" | sed \"s/\\\/\\\//\\\/*/g\" >"$1 }'
@.@(눈이돌아갑니다.)
5. 따라서 완성된 것은...

// -> /*

find . -name *.[Cc]* | awk '{ print "cat "$1" | sed \"s/\\\/\\\//\\\/*/g\" >"$1 }' | sh

이렇게 하면됩니다.

find . -name *.html -exec perl -pi -e 's/바뀌고/바뀔/g' {}\;

저는 이런식으로 하고 있습니다..
   
find 명령어를 사용할 때 파일이름에 와일드카드가 들어간
파일명으로 찾을때는 반드시 파일명을 '*.html'으로 해주어야하는 걸로
알고 있습니다.
혹시나 해서 위의 방법으로 해 보았지만 에러가 나더군요.
find . -name '*.html' -exec perl -pi -e 's/바뀌고/바뀔/g' {} \;

위와 같이 하니까 해결되었습니다.

find . -name *.c -exec perl -pi -e 's/return/jjoy/g' {}\;
를 실행하면

find: missing argument to `-exec'
에러가 납니다.
어찌해야 할지여...
find . -name *.c -exec perl -pi -e 's/return/jjoy/g' {} \;
                                                                            ^ 이부분 주의!


출처:http://blog.naver.com/seeagain?Redirect=Log&logNo=100015785077

+ Recent posts