複数の Info.plist ファイルのテキストを繰り返し置き換えます。

複数の Info.plist ファイルのテキストを繰り返し置き換えます。

私のホームディレクトリには多数のディレクトリがあります。各ディレクトリには複数のレベルのサブディレクトリがあります。その中にはという名前の人もいますInfo.plist

このInfo.plistファイルには次の行があります。

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

この行は、ファイルごとに 1 つ以上であっても異なる場合があります。

<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

関連情報