2017-12-08 36 views
0

디렉토리 및 해당 하위 디렉토리의 모든 파일에서 단어를 찾아 교체해야합니다. 디렉토리 및 해당 하위 디렉토리의 단어 검색 및 바꾸기

나는이 코드 줄 사용 :

perl -pi -w -e 's/foo/bar/g;' *.* 

을하지만은 현재 디렉토리에있는 파일에 단어를 변경하고 하위 디렉토리에 영향을주지 않습니다.

어떻게 모든 디렉토리와 하위 디렉토리에서 단어를 바꿀 수 있습니까?

답변

1

당신은 재귀 적 디렉토리 구조를 통과 순수한 펄 솔루션을 할 수 ,하지만 작성하는 데 더 많은 코드가 필요합니다.

더 쉬운 방법은 모든 파일을 찾아 명령을 실행하도록 명령 할 수있는 find 명령을 사용하는 것입니다.

find . -type f -exec perl -pi -w -e 's/foo/bar/g;' \{\} \; 

는 (I 탈출 한 {}와, 그냥 경우하지만 당신이 필요하지 않을 수도 있습니다)

+0

이 친구는 트릭을했습니다. 고마워요! 나는 이것을 올바른 대답으로 표시하기 위해 지금 기다리고있다. 고맙습니다 –

0

것을보십시오 :

find -type f | xargs -r -I {} perl -pi -w -e 's/foo/bar/g;' {} 

실행해야 재귀 적으로 파일 이름에 포함 된 경우

공간 :

find -type f -print0 | xargs -r0 -I {} perl -pi -w -e 's/foo/bar/g;' {} 
+1

-exec' 원하는 기능을 제공하지 않는다'를 제외에 대한, xargs를 이용할 필요없이 예 : 병렬 ... https://unix.stackexchange.com/questions/24954/when-is-xargs-needed 및 https://unix.stackexchange.com/questions/321697/why-is-looping-needed를 참조하십시오. over-finds-output-bad-practice – Sundeep