
전체 URL 구성표를 교체해야 하는 많은 파일 세트가 있습니다. 일부 파일 이름에는 공백이 포함되어 있습니다. 많은 검색과 시행착오 끝에 이것이 내가 얻은 가장 가까운 것입니다.
find /somedir -type f -print0 -exec sed -i'' -e 's#http\\:\\/\\/domain.com#https\\:\\/\\/www.domain.com#g' {} +
결과 파일에는 구성표가 http:
제거되어 //
'//www.domain.com' 만 남습니다.
또한 새 파일이 생성되어 -e
파일 이름에 추가됩니다. - 즉, some file.php-e
분명히 원하지 않는 것입니다.
이것만으로도 충분하겠지만(파일 을 제거한 후 *-e
내 안의 OCD는 이 작업을 올바르게 수행하는 방법을 정말로 알고 싶어합니다. 참고: 저는 Mac에서 로컬로 작업하고 있지만 Linux에서도 이 작업을 수행할 예정입니다.)
어떤 아이디어라도 대단히 감사하겠습니다!
답변1
솔루션 1: 한 가지 방법은 다음 find
과 함께 사용하는 것입니다 xargs
.
find /dir -type f -print0 | xargs -0 sed -i 's#http://domain.com#https://www.domain.com#g'
솔루션 2: 또 다른 하나는 귀하의 질문과 매우 유사하게 find
with 를 사용하는 것입니다 .-exec
find /dir -type f -exec sed -i 's#http://domain.com#https://www.domain.com#g' {} +
두 솔루션 모두 sed
여러 파일을 인수로 호출합니다. 따라서 sed
모든 파일에 대해 한 번 호출되는 것이 아니라 모든 파일 세트에 대해 호출됩니다.
솔루션 3: 대신 검색 대체 작업에 sed
사용할 수도 있습니다 .perl
perl -i -pe 's#http://domain.com#https://www.domain.com#g' file
find
/ 명령 과 결합 xargs
:
find /dir -type f -print0 | xargs -0 perl -i -pe 's#http://domain.com#https://www.domain.com#g'