月別: 2014年5月

NameChanger.appにAutomatorで選択フィルタをかけてみる

昨年9月のエントリでNameChanger.appをトピックにしたとき<http://wp.me/p1Cs3W-7F>に書いておいたと思っていたのですが、アプリケーションの紹介以上のことをしていなかったので、ここで少し補足をしておきます。

NameChanger.appでは、リネーム対象のアイテムをピックアップする方法として、
・メインウィンドウ左上の「+」ボタンをクリックして、オープンダイアログからアイテムを選択する
・Finderからメインウィンドウ内にアイテムをドロップする
という、2つの方法があります。

NameChanger1

NameChanger.appがAppleScriptに対応していれば、Finderで選択したアイテムにフィルタをかけて、例えば、画像ファイルだけを対象にするといったような使い方をすることができるのですが、残念ながらAppleScriptに対応していないのでこの方法は使えません。
しかし、ここ<http://wp.me/p1Cs3W-l>で記したように、AppleScriptに対応していないアプリケーションへファインダー項目を引き渡す方法としてAutomatorが便利な機能を持っています。
ワークフローにフィルタをかけてみることにしました。

workflow

図のように「Finder項目にフィルタを適用」アクションにオプションで実行時にアクションを表示するという設定にしておけば、ケースごとにフィルタを指定することができます。
これで、Finder上で対象となるアイテムを適当に複数選択した上でこのワークフローを実行すれば、適用されたフィルタに準じた対象だけがリネーム対象としてNameChanger.appのメインウィンドウにピックアップされることになります。

InDesignでパーレンの起こしと受けのペアを一括変換

前処理としてテキストエディタで処理できれば問題はないのですが、組み込んでから半角パーレンを全角に変換しなければならないケースは結構あります。
文字種変換ではパーレン類は変換対象ではないので<http://wp.me/p1Cs3W-8L>、選択対象を一括で変換するという方法はないようです。
となると検索/置換するしかないのですが、パーレンは起こしと受けのペアとなるので面倒です。
そこで、2回が1回になるだけでも有り難いということで、スクリプトを書いてみました。

tell application "Adobe InDesign CC"
	activate
	set SelectedStrngs to the selection
	if SelectedStrngs is not {} then
		set {find grep preferences, change grep preferences} to {nothing, nothing}
		set find_replaceStrList to {{"[ ]?\\(", "("}, {"\\)[ ]?", ")"}, {"[ ]?\\[", "["}, {"\\][ ]?", "]"}}
		set case sensitive of find change text options to false
		set include footnotes of find change text options to false
		set include hidden layers of find change text options to false
		set include locked layers for find of find change text options to false
		set include locked stories for find of find change text options to false
		set include master pages of find change text options to false
		set whole word of find change text options to false
		repeat with i in find_replaceStrList
			set find what of find grep preference 1 to (item 1 of i) as string
			set change to of change grep preferences to (item 2 of i) as string
			--set FoundChar to find grep SelectedStrngs
			change grep SelectedStrngs
		end repeat
		--
		set {find grep preferences, change grep preferences} to {nothing, nothing}
		display notification "終わりました。" with title "完了"
	else
		display notification "文字列を選択してから実行しましょう。" with title "注意!"
	end if
end tell

単純にループしているだけですから、‘find_replaceStrList’リストに付け加えれば何種類でも一括変換できます。

注記)エラーがでることがありますが、同じスクリプトを繰り返し動作させるとエラーなしで処理できてしまいます。なんなんでしょうか?
今回、エラーダイアログのキャプチャーを載せたいと思って試したところ、何度やってもエラーがでないので諦めましたが、これも謎です。

/Volumes に重複したマウントポイントを削除する

たまに、バックアップツールがまるっきり動作しないことがあります(バックアップ先は別なデバイス/ボリュームの場合です。同じボリュームへのバックアップといったケースの方が稀でしょう)。起動はするのに、肝心のバックアップ機能が全く動いていないという現象です。
ほとんどの場合は、マウントポイントのズレが原因です。

何かの拍子に、重複したマウントポイントが作成されて、マウントしたボリュームのパスを利用したファイル/ディレクトリ操作ができなくなるときがあります。
ネットワークボリュームなどをマウント解除しないで再起動した場合などが最もその理由にあたるのでしょうが<http://support.apple.com/kb/TS2474?viewlocale=ja_JP&locale=ja_JP>、再起動以外にもマウント/アンマウントを繰り返していると起こる場合があります。

OS Xではマウントポイントが‘/Volumes’というディレクトリに置かれるようになっています。例えば、‘NetworkDisk’という名前のボリュームをマウントすると、‘/Volumes/NetworkDisk’というマウントポイントが自動的にできて、アンマウントすれば‘/Volumes/NetworkDisk’というマウントポイントは自動的に削除されるという仕組みとなっている訳です。ところが、Apple風にいえば“予期しない再起動”などをきっかけにしてマウントポイントが削除されなかった場合、マウントポイントはディレクトリとして残り、新たにマウントした‘NetworkDisk’という名前のボリュームは‘NetworkDisk-1’(10.9ではハイフンが付いて数字がくるようです)という別なマウントポイント名でマウントされるということが起こる訳です。
そうすると、‘/Volumes/NetworkDisk/…..’というファイルパスを使っているファイル/ディレクトリ指定は無効な設定となる訳で、バックアップツールなどは機能しなくなってしまいます。
対処策は、Appleの解説ページ<http://support.apple.com/kb/TS2474?viewlocale=ja_JP&locale=ja_JP>にあるように、‘/Volumes’から不要なマウントポイントの抜け殻というか空蝉というか空になったディレクトリを削除し、再度当該ボリュームをマウントするということになります。

上記のAppleのページに記載された方法で間違えてはいないのですが、不可視設定の‘/Volumes’にFinderからアクセスするのは面倒です。ましてや、シングルユーザモードで再起動なんて…。

そこで、別な方法で試してみました。

◆Automatorが使えないか?
要は、‘/Volumes’ディレクトリから不要なマウントポイントとなったディレクトリ(空のフォルダ)を削除すれば良い訳で、Automatorのワークフローを試してみました。

1

ステップは間違っていないはずです。
ところが動作しません。試しに、対象フォルダを‘/Volumes’からデスクトップの‘Test’という名前のフォルダにしてみると、そのまま正常動作します。どうやら、システムドメインの不可視フォルダが対象ではフォルダの内容を取得できないということのようです。アクセス権の問題なのでしょう。
どうやら、目論みは頓挫したようです。

◆コマンドラインから試みる
Automatorのワークフローという方法は、いかにもOS Xといった趣で良いと思ったのですが、駄目なら仕方がないので、コマンドラインからなんとかしようとやってみました。
さほど難しいことをやろうとしている訳ではないないのですから。

$ find ‘/Volumes’ -type d -depth 1

これで、‘/Volumes’ディレクトリ内の空のフォルダがピックアップできるはずです。
次は、空フォルダがあったとして、それを削除すればいい訳で、

$ sudo find ‘/Volumes’ -type d -depth 1 -exec rm -fd {} +

とやれば、アクセス権もOKでしょう。
結果、OKのようです。

◆再度Automatorのワークフローにする
ターミナルからコマンドラインで実行するのも面倒なので、Automatorのワークフローにしてみました。
‘sudo’以下をシェルスクリプトの実行モジュールで実行させた場合、パスワードをどうやって組み込むのかがよく分からないので、AppleScriptでやることにしました。

2

問題ないようです。
(確認・保留の手段が一切なく、いきなり削除へいってしまいますので、自己責任でお試しください)