京橋のバイオインフォマティシャンの日常

まずは、データ分析、コマンドラインのメモとして

MacOS Xでやってはいけないコマンド実行、やったら初期化は逃れないかも 〜.DS_Storeファイルが邪魔なのですべて消してみた件〜

この記事の内容を実行してしまったばっかりに、 Mac PCのクリーンアップ(初期化)を余儀なくされても、 一切保証できるものではありませんので、あしからず。

先日、.DS_Storeファイルが無性に邪魔に感じて、 Mac内にある同ファイルすべてを消してみたのだが、 コマンド実行後から、OSの不具合続出で、 保存データの参照関係もメチャメチャとなり、 あえなく、PCを初期化した。。。

そもそも、.DS_Storeのファイルは何なのか?色々と調べると、MacOSで作成されるメタデータを保存する隠しファイルであるらしい。 初期設定では、全てのフォルダ内に、.DS_Storeが隠しファイルで作成される。 どのフォルダにあるかによって役割が違うのだろうが、どうも、MacOS内でのデータ参照とかの大変重要な役割を担っているらしい。

当時を思えば、 「天下のAppleさんのOSで、そんな大事な機能を、ローカルのファイルに完全に任せてることはなく、 そんなファイルが無くても、システム的に勝手に補完されるんじゃない、、、」かと 分かった気になってたのが良くなかったのかもしれない。

Macでやってはいけないコマンド実行

まずは、ターミナル起動を起動して、「DS_Store」がどれくらい存在するかを見てみる*1

# DS_Storeのファイルパスを  text.txt を保存
du -a | grep "DS_Store" > text.txt
#結構、時間かかる!

#行数をカウント
wc -l text.txt
#自分の環境では、「数千個くらい」あった!?

実は、これだけファイル数が多いと、一度に削除することはできない。

そのため、小分けにして、ファイル削除を実行する必要がある。

そこで、行き着いたのが、以下のコマンド実行である。 これだと1回の実行で、1000個ずつ、DS_Storeが消えていく*2

du -a | grep "DS_Store" | head -n 1000 | xargs rm -rf

ここでのポイントは、rm -rf に引数を渡す際にheadからの出力を直接受け取れないので、 xargsを使用して、headの出力を引数として受け取れるようにする。

ただ、このコマンドは実行しないことを強くお勧めします。

良い子は真似しないで。

*1:すでに、MacOSの聖域を見る行為であり、やってはいけない

*2:通常、消せないものを消そうとしないこと