2009-10-26

ResourceForkを除去する

フォルダ内の大量のファイルから一気にリソースフォークを削除する方法。

rsyncを使う

リソースデータを除去したいファイルがたんまり入ったフォルダの名前を「/path/to/src_folder」、除去後のファイルを格納するフォルダが「/path/to/dst_folder」であるとする。

$ rsync -av /path/to/src_folder/ /path/to/dst_folder/

のようにrsyncすることで、リソースフォーク部分を取り除いてデータフォークだけを目的のフォルダ内にコピーすることができる。(-E オプションを付けるとリソースフォークも一緒にコピーできる。あたりまえだが、今回は付けてはいけない。途中経過を気にしないのであれば、vオプションも省いてよい。)

なぜそんな必要が?

Webサーバーの引っ越しで、データを移し替えていたところ怪現象に遭遇。 MacではメジャーなFTPソフト、アヒル隊長こと「CyberDuck」で、サイト全体のデータファイルをダウンロードしたのだが、サーバー上では35.1MB程度のデータ量だったのが、ダウンロードしたフォルダの容量をチェックすると348.9MB?! ファイル数は代わらないが、なんと容量が10倍近くに膨れ上がっていた。 原因を調べるため、テキストファイルの一部について属性を見てみると、

$ ls -@l robots.txt
-rwxr-xr-x@ 1 poohtaro  staff  129  5 31  2007 robots.txt
       com.apple.FinderInfo    32 
       com.apple.ResourceFork 117265 

なぜかリソースフォークが……
どうやらリソースデータはカスタムアイコンのようだ。CyberDuckが付けたのか? しかも全てのファイルに? そりゃデータ量も10倍に肥大化するわな。なんという余計なお世話。

その数2,700もあるファイルのカスタムアイコンをいちいちFinderから手作業で取り除いていたら日が暮れるのでrsyncを使う方法を試してみたというわけ。

2009-10-08

Dockを終了する

killallでもいいんだけど

Mac OS XのDock(ドック)をリセットする方法として、よく、

$ killall Dock

というのを見かけるが、これって、ちょっと乱暴ではあるまいか。

$ osascript -e 'tell application "Dock" to quit'

としてはどうか。

Dockを初期状態に戻す

AppleScriptを使ってDockを初期状態に戻してみよう。※Dockに自分が独自に追加/削除したアプリケーションアイコンとかきれいさっぱり失われるので、そうしたくない人は間違っても実行しないこと。

tell application "Dock" to quit
do shell script "rm ~/Library/Preferences/com.apple.dock.plist"

LeopardのDockを2D表示に」も参照。

2009-07-19

言語を指定してアプリを起動

Mac OS Xで、言語環境の設定に関係なく指定したロケールに対応したUIでアプリケーションを起動する方法。

起動オプション -AppleLanguages を指定する。

例えば言語環境が日本語に設定されているとき、無理矢理英語のUIでSafariを起動するにはターミナルから、

$ /Applications/Safari.app/Contents/MacOS/Safari -AppleLanguages "(en)"

のようにする。

2009-07-03

仮想記憶をOFFにする

Mac OS Xで仮想記憶を切る方法

切る方法と見出しを付けといてなんだが、残念ながらMac OS Xでは仮想記憶を切ることはできない。旧Mac OS 9.xと違って、Virtual MemoryをOFFにはできないのだ。

スワップファイルを作らせない

仮想記憶自体を無効にはできないが、ディスクへのスワップは抑止できる。 Mac OS XはLinuxと違ってスワップ領域を通常のファイルシステム内のファイルとして作成する。 /var/vm/swapfile0のような名前でスワップファイルが作られていく。メモリを大量に使う処理を実行すると、swapfileの後ろの数字が増えてswapfile1, swapfile2という具合で、順にファイルが増えていく。 これが、お気に召さない方も多いようでdynamic_pagerという、スワップファイルの作成を担当しているプログラムを変更してswapfileが増えないようにしてしまえという強者もいらっしゃったりするが、Mac OS X 10.5 Leopardではそこまでしなくてもswapfileを作らせない方法がある。

dynamic_pagerを無効に

仮想メモリの一部を処理している、dynamic_pagerそのものを無効にする(起動しないようにする)のだ。スワップファイルが増えていくのがイヤだという人は次のようにすれば良い。

$ sudo /usr/libexec/PlistBuddy -x -c "Add :Disabled bool true" /System/Library/LaunchDaemons/com.apple.dynamic_pager.plist

と書いたが、

$ sudo launchctl unload -w /System/Library/LaunchDaemons/com.apple.dynamic_pager.plist

のようにlaunchctlコマンドを使うのがまっとうなやり方かな。

その後、再起動して/var/vm内のスワップファイルを削除すれば次から作られることはない。メモリが不足すると、すごく不幸な目にあうかもしれないので自己責任で。

2009-03-15

ターミナルからスクリーンセーバーを起動

ターミナルからスクリーンセーバーを起動する方法

Mac OS Xでコマンドラインからスクリーンセーバーを起動するには、

$ open /System/Library/Frameworks/ScreenSaver.framework/Resources/ScreenSaverEngine.app

または、

$ /System/Library/Frameworks/ScreenSaver.framework/Resources/ScreenSaverEngine.app/Contents/MacOS/ScreenSaverEngine

とすればよい。

macOS High Sierra 以降では、

$ open /System/Library/CoreServices/ScreenSaverEngine.app

または、

$ /System/Library/CoreServices/ScreenSaverEngine.app/Contents/MacOS/ScreenSaverEngine

とする。