여러 디렉토리의 모든 파일에서 1단어를 찾아 바꾸시겠습니까?

여러 디렉토리의 모든 파일에서 1단어를 찾아 바꾸시겠습니까?

themefie.com에서 만든 외부 테마를 사용하는 워드프레스 사이트에 문제가 있는데, 사이트가 구글에 의해 제한되고, 거기에서 테마를 사용하고 있기 때문에 구글에서도 사이트를 제한했습니다.

내 웹사이트의 public_html 디렉토리에서 themefie.com을 검색했고 themefie.com이 포함된 많은 파일을 찾았습니다. Google이 내 웹사이트에 대한 제한을 제거할 수 있도록 내 WordPress 파일에서 이 도메인을 제거해야 한다고 생각합니다.

하지만 문제는 500개가 넘는 파일에서 themefie.com을 찾았다는 것입니다. SSH 루트 명령을 사용하여 themefie.com을 찾아 다른 콘텐츠로 바꾸려면 어떻게 해야 합니까?

Grep 예제 출력:

zes":[]},"title_typography_font_weight":"400","_margin":{"unit":"px","top":"0","right":"0","bottom":"20","left":"0","isLinked":false},"text_align_mobile":"left"},"elements":[],"widgetType":"image-box"},{"id":"72847bd","elType":"widget","settings":{"image":{"url":"https:\/\/themefie.com\/wp\/foodka\/wp-content\/uploads\/2021\/08\/envelope.png","id":452,"alt":"","source":"library"},"title_text":"[email protected]","description_text":"","position":"left","image_space":{"unit":"px","size":10,"sizes":[]},"image_size":{"unit":"%","size":5,"sizes":[]},"content_v
<guid isPermaLink="false">https://themefie.com/wp/foodka/?p=495</guid>

답변1

여러 파일에서 문자열의 모든 항목을 제거하기 위해 하나의 명령을 요청했으므로 다음과 같습니다.

find /home/xxx/public_html -type f -exec sed -i 's/themefie\.com//g' {} \;

이 문자열을 다른 문자열로 바꾸려면 다음을 수행하세요.

find /home/xxx/public_html -type f -exec sed -i 's/themefie\.com/SOMETHING_ELSE/g' {} \;

다음과 같이 파일을 백업할 수 있습니다( .bak수정된 모든 파일에 확장자가 추가됨).

find /home/xxx/public_html -type f -exec sed -i.bak 's/themefie\.com/SOMETHING_ELSE/g' {} \;

그러나 이는 매우 잔인한 방법이며,이 명령을 실행하면 많은 문제가 발생할 가능성이 높습니다..

테마를 다른 것으로 변경할 수 있다면 그렇게 해야 할 것입니다.

무슨 일이 일어나더라도,데이터를 백업하는 것을 잊지 마세요이러한 명령을 실행하기 전에.

@Stephen Kitt가 의견에서 제안한 것처럼 find다른 방식으로 사용할 수 있습니다 sed. 이는 매뉴얼 find페이지를 인용하여 수행됩니다.

-exec command ;
              Execute command; true if 0 status is returned.  All following arguments to find are taken to be arguments to the command until an argument
              consisting of `;' is encountered.  The string `{}' is replaced by the current file name being processed everywhere it occurs in the  argu‐
              ments  to the command, not just in arguments where it is alone, as in some versions of find.  Both of these constructions might need to be
              escaped (with a `\') or quoted to protect them from expansion by the shell.  See the EXAMPLES section for examples of the use of the -exec
              option.   The specified command is run once for each matched file.  The command is executed in the starting directory.  There are unavoid‐
              able security problems surrounding use of the -exec action; you should use the -execdir option instead.

-exec command {} +
              This variant of the -exec action runs the specified command on the selected files, but the command line is built  by  appending  each  se‐
              lected  file name at the end; the total number of invocations of the command will be much less than the number of matched files.  The com‐
              mand line is built in much the same way that xargs builds its command lines.  Only one instance of `{}' is allowed within the command, and
              it  must appear at the end, immediately before the `+'; it needs to be escaped (with a `\') or quoted to protect it from interpretation by
              the shell.  The command is executed in the starting directory.  If any invocation with the `+' form returns a non-zero value as exit  sta‐
              tus,  then  find returns a non-zero exit status.  If find encounters an error, this can sometimes cause an immediate exit, so some pending
              commands may not be run at all.  For this reason -exec my-command ... {} + -quit may not result in my-command actually  being  run.   This
              variant of -exec always returns true.

그러면 다음이 제공됩니다.

find /home/xxx/public_html -type f -exec sed -i 's/themefie\.com/SOMETHING_ELSE/g' {} \+

관련 정보