Macで次のような動作を観察します。
~/foo
別のアプリでディレクトリをゴミ箱に移動すると、シェルのpwdが正しく出力します~/.Trash/foo
。ボンネットの下で何が起こっているのですか?これらのケースは、アプリがemacsのようにファイルの絶対パスを保持しているだけではないことを示しているようです(私はこれで正しいですか?)、またはそれはまったく異なるメカニズムですか?
macosには/.vol/
、実際のディレクトリとファイルにマップされた特別なシステムがあります。ファイルとディレクトリには/.vol/<device_id>/<inode_number>
、ファイルシステム上のどこにファイルがあるかに関係なく、を介してアクセスできます。
それは素敵な小さなシステムです。
したがって、プログラムは、たとえば、のiノード番号を取得して/Users/jdoe/someFile.txt
からそれを開くことができます/.vol/12345/6789
(この場合、デバイスIDは12345、iノード番号は6789です)。次に、/Users/jdoe/someFile.txt
(同じボリューム上で)好きな場所に移動すると、すべてが正常に機能します。これをサポートするシェルスクリプトを作成することもできmagic
ます。
ls -di <file>
iノード番号を取得します。
$ ls -di /User/jdoe/someFile.txt
6789 /User/jdoe/someFile.txt
編集:
stat
IMSoPで強調表示されているリンクされた回答に従って、ボリュームのIDとiノード番号を取得するために使用します。
GetFileInfo /.vol/12345/6789
以前ににあったファイルの現在の場所を返します/Users/jdoe/someFile.txt
。
詳細については、https://stackoverflow.com/questions/11951328/is-there-any-function-to-retrieve-the-path-associated-with-an-inodeを参照してください。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加