Как заставить Rsync копировать файлы псевдонимов?

Системные характеристики: iMac 2011 г., OS X Mountain Lion 10.8.4

Я пришел к выводу, что Rsync неправильно обрабатывает Mac Alises, и теперь обнаружил, что сотни псевдонимов, которые я ранее скопировал на свой переносной диск, мертвы и бесполезны из-за этого.

Есть ли способ заставить Rsync обрабатывать псевдонимы? Если ответ окончательный «нет», то как я могу рекурсивно преобразовать все псевдонимы в каталоге в символические ссылки, чтобы они обрабатывались Rsync? Я нашел ссылки на Applescript, который, по-видимому, сделал бы это, но сайт, на котором размещен скрипт, давно мертв и ушел.

В крайнем случае, кто-нибудь знает что-нибудь кроме Rsync, которое позволяло бы создавать инкрементные резервные копии, а также обрабатывать псевдонимы?

Вместо того, чтобы включать ответ в вопрос (что может сбить с толку будущих посетителей), опубликуйте найденное решение в качестве ответа ниже.
Ах, хорошо, я подумал, что более вероятно, что кто-то наверняка прочитает вопрос и найдет его, а не надеется, что они прочитают все ответы и увидят этот. Но обязательно добавлю.

Ответы (2)

Rsync не может просматривать содержимое файлов псевдонимов, которое необходимо для их преобразования. Поэтому, если вы хотите, чтобы ваша резервная копия использовалась как есть (без восстановления на исходный диск), вам придется заменить псевдонимы символическими ссылками.

Для этого есть решение на MacOSXHints.com. Его нужно запустить на исходном диске (не на резервной копии), я бы также рекомендовал сначала протестировать его на некоторых каталогах-образцах.

#!/bin/sh
if [ $# -eq 0 ]; then
    echo "Usage: alias2ln alias1 alias2 alias3..."
    echo "  where alias1, alias2, etc are alias files."
    echo "  Each alias file will be converted into a symlink."
fi

while [ $# -gt 0 ]; do
    if [ -f "$1" -a ! -L "$1" ]; then
        item_name=`basename "$1"`
        item_parent=`dirname "$1"`
        item_parent="`cd \"${item_parent}\" 2>/dev/null && pwd || echo \"${item_parent}\"`"
        item_path="${item_parent}/${item_name}"

        linksource=`osascript<<EOS
tell app "Finder"
set theItem to (POSIX file "${item_path}") 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
EOS`

        if [ $? -eq 0 ]; then
            if [ ! -z "$linksource" ]; then
                rm "$item_path"
                ln -s "${linksource}" "${item_path}"
                echo "\"${1}\" -> \"${linksource}\""
            fi
        fi
    fi
    shift
done

Бежать

  • сохраните приведенный выше код в текстовый файл (например, alias2symlink)
  • выполнятьchmod 755 alias2symlink
  • перейдите в папку, в которую вы хотите преобразовать псевдонимы в
  • выполнять/path/to/alias2symlink alias1 alias2 ...
Да, я нашел этот код ранее, но я недостаточно разбираюсь в AppleScript, чтобы быть уверенным в том, что он делает. Запуск вслепую казался довольно рискованным занятием, но я мог создать фиктивный каталог для тестирования. Поиграем с ним и посмотрим, как пойдет.
Кстати, это сценарий, о котором я упоминал в своем вопросе, где сайт владельца больше не существует. Это, по-видимому, сценарий оболочки - о чем я действительно знаю лишь немногим больше, чем ничего - и я надеялся найти версию AppleScript, которую он упоминает, но у меня не было успеха в этом отделе. "="
Я посмотрел, как запустить сценарий оболочки, но, похоже, он не работает, что бы я ни пытался. Все, что я получаю, это -bash: alias2ln.txt: command not found.то, что я делаю неправильно?
Исправил ответ. AppleScript фактически включен в приведенный выше сценарий и просто необходим для чтения цели псевдонима.
Боюсь, я не вижу ничего, чего не было, когда я в последний раз просматривал ваш ответ. Я не могу понять, как выполнить этот скрипт. И AppleScript, содержащийся в нем, кажется, только определяет, является ли элемент псевдонимом, и получает путь к исходному элементу. На самом деле он не выполняет преобразование. Есть ли для этого решение только для AppleScript?
Посмотрите внизу ответа (после сценария) :-) Я не знаю решения только для AppleScript.
Я уже сделал, это редактирование уже присутствовало, когда я увидел ответ. Наверное, я никогда не видел его до вашего редактирования. К сожалению, это не помогает мне ничего прояснить. Я просто получаю ранее упомянутую ошибку, и скрипт не выполняется. Вместо этого я пытаюсь адаптировать это к подпрограмме Automator, но пока часть AppleScript/Shell Script не устраивает.

Для дальнейшего использования я нашел простую службу Mac, которая отлично преобразует псевдонимы в символические ссылки!

Это решение фактически оборачивает сценарий, упомянутый в другом ответе, как действие автомата, чтобы упростить его использование теми, кто не знаком с терминалом.

Чтобы повторно создать службу, используйте Automator для создания службы, которая получает выбранные файлы и папки, выберите действие «Выполнить сценарий оболочки» и вставьте сценарий пастикса в область сценариев.

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