ターミナルで inode 検索を行う & 同じ inode のファイルを削除する

Mac を使ってるとハードリンクを使うことがたまにあります。ハードリンクはとても便利なのですが、対象のファイルが必要なくなった時に全てのファイルを削除するのが面倒ですし、それぞれのファイル名が違ったら大変です。そんなときはターミナルで「inode 検索」を使うといいみたいです。

紹介されていたのは以下のページ。

How to: Linux / UNIX Delete or Remove Files With Inode Number


例として適当に作成したファイルをハードリンクで3つに増やしました。ls -li で確認すると全て同じ inode であることがわかります。

ls -li hoge
58368422 -rw-r--r-- 3 mattintosh staff 5 5 17 00:00 test_1.txt
58368422 -rw-r--r-- 3 mattintosh staff 5 5 17 00:00 test_2.txt
58368422 -rw-r--r-- 3 mattintosh staff 5 5 17 00:00 test_3.txt


続いて find コマンドで inode 検索を行います。検索場所を指定して、-inum の後に inode を入力します。例では検索場所をユーザーのホームディレクトリ以下に指定しています。

find ~ -inum 58368422
/Users/mattintosh/hoge/test_1.txt
/Users/mattintosh/hoge/test_2.txt
/Users/mattintosh/hoge/test_3.txt


これだけでもファイルの場所がわかるので1つずつ消していっても構わないのですが -exec を使うことで連続処理が出来ます。

find ~ -inum 58368422 -exec rm -i {} \;
remove /Users/mattintosh/hoge/test_1.txt? y
remove /Users/mattintosh/hoge/test_2.txt? y
remove /Users/mattintosh/hoge/test_3.txt? y


管理できないほどファイルを複製することは今のところ無いですけどね…。