여러 Info.plist 파일의 텍스트를 반복적으로 바꿉니다.

여러 Info.plist 파일의 텍스트를 반복적으로 바꿉니다.

내 홈 디렉토리에는 수많은 디렉토리가 있습니다. 각 디렉터리에는 여러 수준의 하위 디렉터리가 있습니다. 그 중에는 이라는 이름의 사람도 있습니다 Info.plist.

Info.plist파일에는 다음 줄이 있습니다.

<string>/Users/Shared/Library/Mail/V7/74309-67B6-44E3-BD66-9384D1E54398/Junk.mbox</string>

이 줄은 파일당 하나 이상일 수도 있고 다를 수도 있습니다.

<string>/Users/Shared/Library/Mail/V7/74398/Junk.mbox</string>

<string>/Users/Shared/Library/Mail/V7/7-67B8/Sent.mbox</string>

<string>/Users/Shared/Library/Mail/V7/OLD/Old.mbox</string>

Info.plist이 파일에서 이러한 줄을 찾아 섹션 SharedFireball.

따라서 이전 줄은 다음과 같습니다.

<string>/Users/Fireball/Library/Mail/V7/74398/Junk.mbox</string>

<string>/Users/Fireball/Library/Mail/V7/7-67B8/Sent.mbox</string>

<string>/Users/Fireball/Library/Mail/V7/OLD/Old.mbox</string>

나머지는 그대로 두십시오.

따라서 먼저 디렉터리 구조를 재귀적으로 검색하고, 해당 Info.plist파일에 포함된 모든 파일을 찾고, 각 파일에서 해당 경로에 사용된 Info.plist키워드가 있는지 검색하여 .SharedFireball

이를 수행하기 위해 마법의 UNIX 명령을 어떻게 사용합니까?

이것저것 가지고 놀고 있어요

find . -type f -name Info.plist -exec sed 's/Shared/Fireball/g' {} +

이는 콘솔에 올바른 변경 사항을 인쇄하기 때문에 거의 작동하는 것처럼 보이지만 파일은 변경되지 않았습니다.

답변1

플래그의 내부 편집(주요 운영 체제에서 흔히 볼 수 있는 대부분의 플래그)을 sed지원한다고 가정하면 다음을 수행할 수 있습니다.-i

find . -type f -name Info.plist -exec sed -i 's/Shared/Fireball/g' {} +

그렇지 않은 경우 다음을 시도해 볼 수 있습니다 perl.

find . -type f -name Info.plist -exec perl -i -pe 's/Shared/Fireball/g' {} +

Shared문자열의 모든 인스턴스가 대체하려는 인스턴스인지 확인하세요 . 안전을 확보하려면 더 많은 경로를 사용하는 것이 더 안전할 수 있습니다.

find . -type f -name Info.plist -exec sed -i 's|/Users/Shared/Library/|/Users/Fireball/Library|g' {} +

답변2

주문하다

find . -type f -iname Info.plist -exec sed "/<string>\/Users\/Shared\/Library\/Mail/s/Shared/Fireball/g" {} \; 2>/dev/null

산출

<string>/Users/Fireball/Library/Mail/V7/74398/Junk.mbox</string>

<string>/Users/Fireball/Library/Mail/V7/7-67B8/Sent.mbox</string>

<string>/Users/Fireball/Library/Mail/V7/OLD/Old.mbox</stri

관련 정보