※いろいろ間違っていたので修正しました(2024/4/19 20:19 JST)
以前、以下を書きまして、ちょっと安心していました。要は、.DS_Storeという隠しファイルがFinderでの表示形式を決めているため、フォルダによって.DS_Storeがあったりなかったりすると意図した表示にならない(リストで見たいのにアイコン表示になったり)ことが嫌でした。
色々な方がやっているように、レジストリ的なやつを設定しているつもりですが、なぜか忘れた頃に.DS_Storeが生成されます。困ったやつです。
もう、面倒なので、定期的に.DS_Storeを削除するスクリプトを実行するようにしてみました。以下、方法のメモです。
どこかに削除用のスクリプトを書きます
ホームディレクトリ直下にds_store_rm_scriptというフォルダを作成して、その中に以下の内容のscript.shというファイルを作成しました。
#!bin/sh cd /Users/hoge find Desktop Documents Downloads Movies Music Pictures Library/CloudStorage/Dropbox -name '.DS_Store' -type f -ls -delete
このシェルスクリプトに実行権をつけます。
chmod +x script.sh
この↑スクリプトの実行主である/bin/shにフルディスクアクセス権限をつけます
[システム設定] - [プライバシーとセキュリティ] - [フルディスクアクセス] をたどって以下の画面を表示した状態にしておきます。Finderを開いて [移動] - [フォルダへ移動]をクリックして、パスに/binと入力するとshのアイコンが見えてきますので、さきほど開いた画面にドラッグ&ドロップすれば追加できます。
plistファイルを作成して~/Library/LaunchAgentsに配置する
com.takahashilabo.ds_store_rm.plistというファイル名で以下の内容のファイルを~/Library/LaunchAgentsに作成しました。ネットの記事をちょっと改変しただけです。StartIntervalは秒数で指定らしいので、とりあえず1時間に1回実行させようかと思いましたので3600にしました。1日に1回でも十分なような気がします。時刻指定もあるようです。調べてみてください。
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> <plist version="1.0"> <dict> <key>Label</key> <string>ds_store_rm_script</string> <key>Program</key> <string>/Users/hoge/ds_store_rm_script/script.sh</string> <key>StartInterval</key> <integer>3600</integer> <key>StandardOutPath</key> <string>/Users/hoge/ds_store_rm_script/script.out</string> <key>StandardErrorPath</key> <string>/Users/hoge/ds_store_rm_script/script.err</string> </dict> </plist>
plistファイルの権限を変更する
これがちょっとハマったところでした。こちらの記事に助けていただきました。ありがとうございます🙇♂
chmod 664 com.takahashilabo.ds_store_rm.plist
では、スクリプトをmacに実行してもらうように登録します
以下をターミナルで実行します。
launchctl load ~/Library/LaunchAgents/com.takahashilabo.ds_store_rm.plist
登録できたかは、以下で確認できます。
launchctl list | grep ds_store_rm_script
いらなくなったら、以下で自動実行を停止できます。
launchctl unload ~/Library/LaunchAgents/com.takahashilabo.ds_store_rm.plist
とりあえず、動画することは検証しています。なかなか思うように動いてくれなくて大変でした。。。
将来の自分のために、LaunchAgentsのデバッグ方法を書いておきます。
スクリプトが実行されるまで1時間も待てないので60秒とかに変更し、unloadしてloadします。ちゃんと動作するかlaunchctl list | grep ds_store_rmで0と実行状態が表示されることを確認します。
Macによってスクリプトが実行されると、errとoutファイルが生成されるので、とりあえず、削除しておきます。ファイルが生成されたらスクリプトが実行された証拠になります。
ファイル権限がないとか実行時エラーはoutファイルに出力されるのでみます。あと、launchctl list | grep ds_store_rmを再度実行して0のままになっているか確認します。78とかになっていたら実行失敗しているのでググって調べます。僕の場合は最初にシェルスクリプトの先頭に#/bin/shを書いていなかったため78になりましたし、そもそもchmod +xで実行権をつけていないでエラーにもなりました。あれこれ直してやっと動いた感じです。
でわ!