システム内の特定のフォルダーのパスを、できるだけシンプルかつ効率的に追跡したいと考えています。最初はシンボリックリンクを使用してこれを達成できると考えていましたが、シンボリックリンクの動作に関する矛盾した情報が見つかりました。
多くの質問は、シンボリックリンクターゲットへのパスを取得する(「使用」などの回答greadlink
)。しかし、どのように入手するかを尋ねる質問は見つかりません。現在ターゲットパス、私が見つけた答えはすべて、オリジナルターゲットパス。
しかし、現在のターゲット パスを見つける方法を探していると、すべての回答で、ターゲットが移動した後はシンボリック リンクが「壊れている」ため、これは不可能であると言っているようです。このリンクが壊れているとみなされる理由がわかりません。ターゲット A へのシンボリック リンク B を作成し、A を新しい場所に mv すると、シンボリック リンク B は引き続き機能します。A が移動された後に A に変更が加えられた場合でも、A の更新されたコンテンツが表示されます。また、パス ファインダーで、B のコンテキスト メニューで [元の内容を表示] を選択すると、更新しましたA のパスです。しかし、「greadlink B」は A の元の位置のみを指し、現在の位置は指していません。
シンボリックリンクについては具体的に言及しましたが、より広範で重要な質問は、ファイルを移動した後にそのファイルの場所を取得する方法です。これまでに見つけた最善の解決策は、find
何らかの方法を使用することですが、これは、いくつかのファイル以上を追跡しようとすると、非常に時間がかかります。しかし、Path Finder のシンボリックリンクはターゲットの場所を効果的に追跡しているようなので、それが可能であることはわかっています。
答え1
エイリアスについて教えてくれた@grawityに感謝します。ファイルの場所を追跡するために、シンボリックリンクの代わりにエイリアスを使用しようとしました。次のスクリプトを使用すれば、現在ターゲットが移動した後でもターゲットまでのパスを維持します。
ResolveAlias.applescript
#!/usr/bin/osascript
on run argv
tell application "Finder"
set theItem to (POSIX file (item 1 of argv)) as alias
if the kind of theItem is "alias" then
get the POSIX path of (original item of theItem as text)
end if
end tell
end run
呼び出されるosascript "/path/to/ResolveAlias.applescript" "/path/to/alias"