특정 폴더의 하위 모든 파일들에 대하여 특정 문자열을 치환하는

yslee96의 이미지

안녕하세요 ..^^
먼저 읽어 주셔서 감사합니다.
다른게 아니라 특정 폴더 밑의 모든 파일(하위 폴더 포함)들에 대하여
특정 문자열을 찾아서 다른 문자열로 변환하는 방법에 대하여 알고 싶습니다.
쉘을 가지고 하면 될거 같은데 제 수준으로는 조금 어렵네요..
혹시 알고 계신 분들은 꼭 알려주시기 바랍니다...
그럼 즐거운 하루 되세요~~

cinsk의 이미지

Emacs 홍보 차원에서.. :)
Emacs로 하는 법은 다음과 같습니다.

일단 특정 디렉토리가 $HOME/src라고 가정합니다.

Emacs를 띄우고, C-x C-f $HOME/src/.를 입력합니다. (마지막 "/."도 꼭 입력하기 바랍니다. 이러면 dired 모드가 뜹니다.

그 상태에서 C-u s를 누릅니다. 그러면 ls의 옵션을 입력하라고 minibuffer에 뜹니다. 원래 "-al"로 되어 있는데, 이 것을 "-alR"로 고칩니다. 그리고 <RET>을 누르고 조금 기다리면, $HOME/src의 모든 파일들의 목록이 나옵니다.

그 상태에서 '*', 't'를 누릅니다. 그러면 모든 파일들이 선택됩니다.

그 상태에서 대문자 "Q"를 누릅니다. 여기에 찾을 문자열을 regular expression으로 쓰고 <RET>을 누르고 바꿀 문자열을 regular expression으로 쓰고 <RET>을 누릅니다. 그러면 해당하는 문자열에 커서가 위치합니다. 모두 자동으로 치환하려면 "!"를 누릅니다.

익명 사용자의 이미지

vi를 사용하는 방법입니다.

# find . -type f -name "*.c" -exec vi -e -c ":%s/int/void/g" -c wq {} \;
cinsk의 이미지

그게 아니고 shell을 쓰시겠다면 먼저 한 파일에 대해 바꾸는 script를 작성하고, 이 것을 find로 돌리면 됩니다. 예를 들어 script 이름이 replace.sh라면,

$ find . -name '*.c' -exec replace.sh {} \;

로 실행하면 모든 *.c 파일에 대해 수행합니다. replace.sh는 다음과 비슷하게? 작성하면 됩니다.

#!/bin/sh

PATH=/bin:/usr/bin:/usr/local/bin
TMP=/tmp

trap "rm -f $TMP/$$.tmp" 1 2 3 13 15
sed -e 'find/replace하는 expression' $1 > $TMP/$$.tmp
mv $TMP $1
trap - 1 2 3 13 15

물론 c-break 등을 고려, 안전한 script를 만들려면 조금 더 생각해야 하지만.. :)

댓글 달기

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
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.