ファイルの場所を追跡する方法


1

私は自分のシステムの特定のフォルダのパスをできるだけ簡単で効率的な方法で追跡したいと思います。私の最初の仮定はシンボリックリンクを使用してこれを達成することができるということでした、しかし私はシンボリックリンクがどのように機能するかについて矛盾する情報を見ます。

多くの質問がどのようにして尋ねました シンボリックリンクターゲットへのパスを取得する (「使用などの回答とは greadlink ")しかし、私はどうやって手に入れるかを尋ねる質問を見つけることができません。 現在 なぜなら、私が見つけたすべての答えは 元の ターゲットパス

しかし、現在のターゲットパスを見つける方法を探すとき、すべての答えは、ターゲットが移動した後にシンボリックリンクが「壊れた」ために不可能であると言っているようです。私は彼らがこのリンクが壊れていると考える理由を理解していません。シンボリックリンクBをターゲットAにしてからAを新しい場所に移動しても、シンボリックリンクBはまだ有効です。 Aが移動された後にAに変更が加えられても、Aの更新内容は表示されたままです。そしてPath Finderで、Bのコンテキストメニューから 'オリジナルを表示'を選択すると、 更新しました それでも、「greadlink B」は、現在の場所ではなく、Aの元の場所を指すだけです。

シンボリックリンクについては特に言及しましたが、私のより広くより重要な質問は、移動後にファイルの場所を取得する方法です。私がこれまで見つけた最良の解決策は使うことです find いくつかの方法で、しかし私が数個以上のファイルを追跡しようとしているときこれは遅すぎる。しかし、Path Finderのシンボリックリンクはターゲットの場所を効果的に追跡しているように見えるので、私はそれが可能でなければならないことを知っています。


移動したシンボリック作品は、作成に絶対パスが使用された場合にのみ有効になります。相対パスは通常失敗します(ターゲットがの1つ以上のインスタンスで始まっていない限り)。 ../ リンクは階層内の同じレベルのディレクトリに移動されます。
AFH

UnixのシンボリックリンクとmacOSのエイリアスを混同していないのでしょうか。
grawity

@AFH説明をありがとう。更新されたパスを取得する方法を知っていますか?
Matt Groth

あなたが使用することができます ls -l リンク先を表示します。それがディレクトリリンクであり、あなたが末尾を追加する場合 / ターゲットディレクトリの内容が表示されます。
AFH

@grawityあなたのコメントは私を解決策に導いた。私は答えを書いてあなたを信用しています。
Matt Groth

回答:


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"


1
この解決策は最善ではないことがわかりました。テストの結果、Finderはエイリアスターゲットパスを移動した直後に更新するのではなく、任意の時間が経過した後に更新することを確認しました。場合によっては数秒で更新されることがありますが、他の場合には更新されることはありません(数分以上待たずに済むので、最終的には更新されると思います)。明るい面では、Force Quit winodwからFinderを再起動した後、エイリアスターゲットパスは常に正しくリセットされます。
Matt Groth
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.