Как отследить местоположение файла?

Как отследить местоположение файла?

Я хочу отслеживать пути определенных папок в моей системе максимально простым и эффективным способом. Моим первым предположением было, что я смогу добиться этого с помощью символических ссылок, но я вижу противоречивую информацию о том, как работает символическая ссылка.

Многие задавали вопросы, какполучить путь к цели символической ссылки(с ответами типа "использовать greadlink"). Но я не могу найти ни одного вопроса о том, как получитьтекущийцелевой путь, так как все ответы, которые я нашел, похоже, получают толькооригинальныйцелевой путь.

Но когда я ищу способ найти текущий целевой путь, все ответы, похоже, говорят, что это невозможно, поскольку после перемещения цели символическая ссылка становится «сломанной». Я не понимаю, почему они считают эту ссылку сломанной. Если я создаю символическую ссылку B на цель A, а затем mv A на новое место, символическая ссылка B все равно работает для меня. Она все еще отображает обновленное содержимое A, даже если изменения вносятся в A после перемещения A. А в Path Finder выбор «Показать оригинал» в контекстном меню для 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"

Связанный контент