↓のOSにてお願いします。pythonなどの言語で出来ると助かります。
* Mac OS X Snow Leopard
* Linux
UNIX 系のファイルシステムは基本的に上から下にたどるようにできているので、対象ファイルが存在する事が分かっている場所から再起的に探す事になると思います。find コマンドは -inum inode_number オプションを持っているので、これを利用するのが簡単かも知れません。find の最初の引数でどこから検索するかを指定するので、ここが大きいファイルシステムの上の方のディレクトリだと操作に時間がかかるかもしれません。想定される場所が限定できるなら、なるべく具体的な場所から探した方がよいでしょう。python から呼ぶ必要があるのであれば os.popen, os.popen2 を介して呼び、標準出力の結果をえるという事も可能です。
例:inode 番号 1657248 のファイルのパスを /private/etc 以下で探して表示する
$ find /private/etc -inum 1657248
find を起動したくないという事であれば、同様の処理を python で書く事も可能です。
#!/usr/bin/env python import os from stat import * def find_inum(inum, dir_path): for f in os.listdir(dir_path): fpath = os.path.join(dir_path, f) statrec = os.stat(fpath) mode = statrec[ST_MODE] ino = statrec[ST_INO] if ino == inum: print fpath return True if S_ISDIR(mode): if find_inum(inum, fpath): break return False based = '/private/etc' # example target_inum = 1657248 # example if __name__ == '__main__': find_inum(target_inum, based)
http://www.python.jp/doc/2.5/lib/os-file-dir.html#l2h-2675
あるディレクトリ以下の inode とパスの一覧をえて、それを検索する方法も考えられます。
ここでは一覧を得るコマンド部分の例を示します。
対象を通常ファイルのみにする場合(-type f でファイルに限定):
$ find /private/etc -type f | xargs ls -i
ディレクトリも含める場合(ディレクトリ自身を表示するため ls に -d を指定):
$ find /private/etc | xargs ls -di
カーネルには DNLC, dcache といったデータ構造があって、これを使うとより速く見つける事も可能ですが、だいぶ面倒になりますし、そもそもキャッシュなので、最近使っていないファイルの情報はありません。