1

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

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

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

Хотя я специально упоминал символические ссылки, мой более широкий и более важный вопрос - как найти местоположение файла после его перемещения. Лучшее решение, которое я нашел, - это каким-то образом использовать find , но это слишком медленно, когда я пытаюсь отследить больше, чем несколько файлов. Но символические ссылки в Path Finder эффективно отслеживают целевые местоположения, поэтому я знаю, что это возможно.

1 ответ1

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"

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .