Я хочу отслеживать пути определенных папок в моей системе максимально простым и эффективным способом. Моим первым предположением было, что я смогу добиться этого с помощью символических ссылок, но я вижу противоречивую информацию о том, как работает символическая ссылка.
Многие задавали вопросы, какполучить путь к цели символической ссылки(с ответами типа "использовать 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"