memorandums

日々の生活で問題解決したこと、知ってよかったことなどを自分が思い出すために記録しています。

.DS_Storeを駆逐したかった

※いろいろ間違っていたので修正しました(2024/4/19 20:19 JST

以前、以下を書きまして、ちょっと安心していました。要は、.DS_Storeという隠しファイルがFinderでの表示形式を決めているため、フォルダによって.DS_Storeがあったりなかったりすると意図した表示にならない(リストで見たいのにアイコン表示になったり)ことが嫌でした。

memorandums.hatenablog.com

色々な方がやっているように、レジストリ的なやつを設定しているつもりですが、なぜか忘れた頃に.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で実行権をつけていないでエラーにもなりました。あれこれ直してやっと動いた感じです。

でわ!