🪓

リソースフォーク (._ で始まるファイル) をディレクトリから一括削除する方法

2023/01/03に公開

リソースフォークとは?

Mac で USB メモリなどの外部ストレージを使用していると、._ で始まるファイルがあちこちに勝手に作られてしまうことはありませんか?

これはリソースフォークと呼ばれる Classic Mac OS 特有のファイル構造を記録するために作られる隠しファイルです。Mac 本体のストレージでは通常このファイルは生成されませんが、USB メモリなどのファイルシステムが異なるストレージにデータを格納したり参照したりするとこのファイルが生成されることがあります。

問題点

USB メモリにデータを保管しているうちはそこまで気にならないのですが、USB メモリにあるデータを Mac 本体に移動させたりしたい場合に邪魔になることがあります。

USB メモリにあるディレクトリから Mac 本体の任意の場所に mv コマンドで移動させようとしたときに、一部のファイルでなぜか No such file or directory というエラーが発生することがあります。詳しい理由はわかりませんが、移動させる前はたしかに存在していたはずなのに、移動する過程でファイルの実態は消えてしまうがシステム側は存在していると認識してしまうのかもしれません。

mv コマンドの途中でエラーが発生すると、空ディレクトリがそのまま残ってしまったりするので、大量のディレクトリを USB メモリから Mac 本体に移動させたりしたい場合に空ディレクトリを削除する手間が発生します。なにより、単純に使われないファイルがいつまでも存在しているのは正直鬱陶しいです。

ディレクトリの中に大量にファイルがあると、それと同じ数だけファイルが生成されてしまうことがあるので、一つずつ削除するのは非常にめんどくさいです。

削除して大丈夫か?

これは昔の Mac のファイルシステムの名残で、今はほとんど使われていないため、削除しても全く問題ないらしいです。

削除方法

fd コマンドを使うと簡単に一括削除することができます。

念のため、削除されるファイル一覧を事前に確認しておきます。

Shell
cd /path/to/somewhere
fd -H "\._"

次にヒットしたそれぞれのファイルを削除します。

Shell
fd -H "\._" -x rm -f {}

論理的完全削除をしたい場合は shred コマンドを使います。

Shell
fd -H "\._" -x shred -fuvz {}

fd コマンドのオプションについては以下のとおりです。

  • -H
    • 隠しファイルを表示するコマンドです
    • リソースフォークは ._ から始まる隠しファイルなので必須オプションです
    • . は任意の文字を表す正規表現の特殊文字なのでエスケープする必要があります
  • -x
    • 別のコマンドを指定することで、ヒットした全ファイルに対してそのコマンドを実行します
    • {} には実行するたびに該当のファイル名が挿入されます

標準コマンド (find など) のみで一括削除する方法について何か良いやり方があれば教えていただけるとありがたいです 🙏

参考サイト

GitHubで編集を提案

Discussion