[AppleScropt] do shell scriptに任せる

AppleScriptで実現しようとすると面倒でも、シェルでは簡単に実現できる事もあります。
テキストファイルに書き出すとかです。

AppleScriptを学習したいというのであればAppleScriptで記述するのでしょうが、そうではなく結果が欲しいだけであれば安心と信頼のシェルに丸投げしても良いと思います。

私が良く使うコマンドを紹介します。

スポンサーリンク

使い方


set tmpTxt to do shell script "< コマンド >"

説明

< コマンド >にUNIXコマンドを記載して実行すると、変数「tmpTxt」に結果が入ります。
ものによっては複数行のテキストになるものもありますが、それは使用時に適宜整形します。

よく使うコマンド

文字列を表示する

以下の’文字列’部分を変数から取得して、以降にパイプで文字列を整形する処理を繋いでよく使います。


echo '文字列'

一つ上の階層のパスを得る

以下の’文字列’部分を変数から取得して、操作対象のパスを指定する際などに使います。
例えば変数をスクリプト自身のパスに設定したりします。


dirname 'パス'

標準出力のリダイレクト

処理結果をテキストファイルに書き出す際に使用します。

文字列をカレントユーザのデスクトップにhoge.txtとして書き出す例です。
hoge部分は任意のファイル名に変更可能です。
以下のようなパターンを使い分けます。

既に同一の名前のファイルがある場合は上書きする。


echo '文字列' > ~/Desktop/hoge.txt

既に同一の名前のファイルがある場合は追記する。


echo '文字列' >> ~/Desktop/hoge.txt

処理のエラーメッセージをカレントユーザのデスクトップに書き出す。
既に同一の名前のファイルがある場合は追記する。


'処理内容' 2>>  ~/Desktop/hoge.txt

内包するファイルごと警告なしでフォルダを削除

アプリケーションの設定ファイル等をまとめて削除する際に使っています。
この使い方は少々危険なので理解して使いましょう。


rm -rf 'フォルダパス'

内包するファイルごとフォルダ/ファイルをコピー

コピー先に同名ファイルが有っても警告しないで上書きします。


cp -rf 'コピー元パス' 'コピー先パス'

ファイル/フォルダのリネーム

ファイル名をリストに取得しておくなどして、AppleScript内でループをまわして一括リネームなどに使います。


mv '対象ファイルパス( + ファイル名)' 'リネーム後のパス( + ファイル名)'

ファイルリストの作成によく使うコマンド

指定フォルダのファイル名一覧を取得

フォルダパスで指定したフォルダ内のファイル複数行のテキストとして取得します。
カレントディレクトリを含みません。
改行毎にリストに格納するなどして一括処理に使用します。


ls -A 'フォルダパス'

指定フォルダとそれ以下の階層のファイル名一覧を取得

ファイル名一覧を取得して、ファイル名の後ろにフォルダには ‘/’ リンクには ‘@’ 実行可能には ‘*’ の文字をつけます。
付いている文字によって処理を分岐させたりして使います。


ls -AFR 'フォルダパス'

指定フォルダのファイル名一覧をフルパスで取得

ファイル名の一覧だけでなく、フルパスで欲しい場合に使います。


find 'フォルダパス'  -maxdepth 1 -mindepth 1

パイプで繋いでよく使うコマンド

以下は上に書かれている様なコマンドの後ろにパイプ’|’で処理をつないで結果を整形する際に使ったりします。

例えば以下のようにechoの後にsedをつけて結果を置換したりします。
この例の場合「tmpTxt」は「123def」となります。


set tmpTxt to do shell script "echo 'abcdef'| sed 's/abc/123/g'"

tab区切りの任意の部分をを抜き出す

以下の例では、一番目と三番目を抜き出します。


 awk '{print $1, $3}'

任意の文字を区切り文字とする、一番後ろを抜き出す

以下の例では、カンマを区切り文字としています。


 awk -F'.' '{print $NF}'

awkの使用例

任意の文字列を区切り文字にする事ができます。
以下の例では「at」を区切り文字として後ろから二番目と前から二番目を抜き出しています。


 awk -F'at''{print $(NF -1), $2}'

文字を置換

そのままですが、置換です。
指定の文字を任意の文字に置き換えます。
以下の例では、abcを123に置き換えます。


 sed 's/abc/123/g'

スラッシュを値なしに置換(削除)

これも同じ置換ですが、スラッシュを置換したい場合は、後半部分の区切り文字を変えればできますよという説明です。


 sed 's:/::g'

置換前の文字列を置換後に使用

\(\)に囲まれた文字が置換後に\1, \2,… として使用できます。


sed 's/\([a-z]\)\(.\)$/\1zzz\2/g'

指定した文字列を含む行を取得

使用したい結果だけ得られるようにフィルタリングする際に使用したりします。
以下の例では、文字列abcを含む行を検索して表示します。


grep 'abc'

特定の文字列を複数すべて含んでいない行を取得

上記と同様に結果をフィルタリングする際に使用したりします。
以下の例では、文字列abcと123のどちらも含んでいない行を取得しています。


grep -v -e 'abc' -e '123'

行数を数える

ファイル数など、要素の数が欲しい時に使用します。


wc -l