AppleScriptまたはシェルの自動化方法を教えてください。

Macを使っています。以下で説明するスクリプトの書き方を教えてください。
可能であればAppleScriptでお願いします。

やりたいことの要約
あるバイナリファイル(myconfig)をxmlとして開いて、出現する文字列「hatena」をすべて「jinriki」に変更して、ファイルをバイナリに戻して保存したいと考えています。

plutil -convert xml1 myconfig
(置き換え処理)
plutil -convert binary1 myconfig

やりたいことの詳細
対象のディレクトリは「~/MyDir/」以下です。
このフォルダやもう1~2階層下のサブフォルダに「*.myprj」というファイルがあります(*は任意の文字列)。このファイルは実はディレクトリで、開くとディレクトリの直下に(myconfig)というファイルが置かれています。階層の構造はまちまちですが、2~3階層程度です。ここのすべての *.myprj フォルダの直下の myconfig に前述の置き換え処理を施したいと思っています。

*置き換えるべき文字列「hatena」が見つからない場合はそのまま修了して保存します。
ポイントは最大で426ポイント(手数料含む)を差し上げます。これが所有している全ポイントですので。

質問はコメントにお願いします。

回答の条件
  • 1人5回まで
  • 登録:
  • 終了:2014/07/09 19:30:03
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。

回答1件)

id:a-kuma3 No.1

回答回数4973ベストアンサー獲得回数2154

ポイント100pt

AppleScript は、よく分からないので、bash のスクリプトです。

#! /bin/bash

TMP1=/tmp/__tempfile__1__
TMP2=/tmp/__tempfile__2__

conv_config () {

CONF=$1/myconfig
BACK=$1/myconfig.bak

plutil -convert xml1 -o $TMP1 $CONF

# 一応、バックアップ
mv $CONF $BACK

# 置き換え処理
sed -e 's/hatena/jinriki/g' $TMP1 > $TMP2

plutil -convert binary1 -o $CONF $TMP2

rm $TMP1 $TMP2

}



BASE=~/MyDir/

DIRS=`find $BASE -type d -name "*.myprj" -print`

for d in $DIRS
do
    conv_config $d
done

それぞれの myconfig があるディレクトリに、myconfig.bak という名前でバックアップを作ってます。

バックアップを元に戻すのは、こんな感じ。

#! /bin/bash

BASE=~/MyDir/

DIRS=`find $BASE -type d -name "*.myprj" -print`

for d in $DIRS
do
    mv $d/myconfig.bak $d/myconfig
done


動作確認をしてないので、複製を取った環境で試すか、別途、バックアップを取って試してみてください。

コメントはまだありません

この質問への反応(ブックマークコメント)

トラックバック

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません