NASに溜まる.DS_Storeや._*ファイルを自動削除
LinuxサーバーにSambaでNASを構築して、主にパソコン間のファイルの共有に使っています。
概ね問題はないのですが、少し気になるのがmacが勝手に隠しファイルを生成してしまうことです。具体的には.DS_Store1と._{何かしらのファイル名}の2種類です。
macでは特殊なファイル扱いで表示されませんが、Linuxでは普通に表示されてしまいます。自分はNASで隠しファイルを使わないので以前は許容していたのですが、このサイトの画像などはNAS上の/Publicをmoris.day/filesにマウントすることで公開しているので、サイト上に無駄な隠しファイルが表示されてしまい、さすがに目障りに感じるようになりました。

.DS_Storeの生成を止める
.DS_Storeの方は以下のコマンドでネットワークストレージ上に生成することを止められます。
defaults write com.apple.desktopservices DSDontWriteNetworkStores True
killall Finder
しかし、._*ファイルについては停止する手段が無いようです。
自動削除
仕方ないのでサーバーで自動削除するserviceを作成しました。
コマンド
まず、findコマンドで検索して削除するシェルスクリプトを作りました。
/home/Share/の部分は隠しファイルを削除したいディレクトリに変更してください
/usr/local/bin/rmds
#!/bin/sh
find /home/Share/ -name '._*' -type f -ls -delete
find /home/Share/ -name '.DS_Store' -type f -ls -delete
実行権限を与えます
sudo chown root:root /usr/local/bin/rmds
sudo chmod a+x /usr/local/bin/rmds
systemd unit作成
先ほどのrmdsコマンドを実行するserviceファイルと、それを定期的に起動させるtimerファイルを作成します。
この例では、毎日0時に実行されます。
/etc/systemd/system/rmds.service
[Unit]
Description=Remove .DS_Store and ._* files
[Service]
Type=oneshot
ExecStart=/usr/local/bin/rmds
[Install]
WantedBy=multi-user.target
/etc/systemd/system/rmds.timer
[Unit]
Description=rmds.service timer
[Timer]
OnCalendar=*-*-* 00:00:00
[Install]
WantedBy=timers.target
有効化
service file読み込み
sudo systemctl daemon-reload
timer有効化
.serviceを有効化する必要はありません。
sudo systemctl enable rmds.timer
sudo systemctl start rmds.timer
ログを見てみると削除されていることが確認できました。
sudo journalctl -u rmds
おまけ
macOSのSMBにはバグがあり、速度が遅くなっているそうです。
macの/etc/nsmb.confに以下を追記、再接続すると適用されます。
[default]
signing_required=no
自分はNASで巨大なファイルを扱うことがあまりないので速くなったかはわかりませんが、ファイルを開いたときの応答が速くなり、クイックルックでプレビューしたときにフリーズすることがなくなりました。
参考: https://support.apple.com/ja-jp/101442
Footnotes
-
DS_StoreのDSはおそらくDesktop Serviceの略 ↩