Як виправити помилкові псевдоніми?


7

У мене було два зовнішніх жорстких диска: External і Backup. Зовнішні мали багато псевдонімів, які вказували на інші файли на тому ж диску. Резервне копіювання було використано для резервного копіювання зовнішнього.

Зовнішній не вдалося, і тепер я використовую резервне копіювання, яке з того часу я перейменував у зовнішній. На жаль, всі ці псевдоніми зараз вказують /Volumes/Backup/… і таким чином більше не працювати.

Я не хочу, щоб вони виправляли або відтворювали їх по одному.

Чи є спосіб виправити всі псевдоніми, щоб вони вказували /Volumes/External/… замість /Volumes/Backup/…?


У вашому оповіданні щось відсутнє. У OS X псевдоніми не перервуться при перейменуванні тома.
ghoppe

2
вони будуть, якщо вони вказують на шлях у / Томи
Robert S Ciaccio

1
Псевдоніми @calavara не є символічними посиланнями, які вони посилають на ідентифікатор файлу, а не шлях
ghoppe

@ghoppe: Я зауважу, що псевдоніми розбиті. Я просто хочу виправити їх у цілому, і я не знаю як. Я боюся, що головна відсутність моєї історії - всередині Finder. Наскільки я знаю, псевдоніми містять не тільки ідентифікатор файлу, але й шлях і багато інших відомостей, які прихований алгоритм використовує для дозволу псевдонімів. Якщо я використовую strings Команда на моїх невдалих псевдонімах, я спостерігаю, що вони містять повний шлях до /Volumes/Backup/.... У всякому разі, я починаю думати, що символічні зв'язки з відносним шляхом можуть бути більш надійним рішенням у моєму випадку.
mouviciel

@ghoppe: вони містять шлях ... перевірити en.wikipedia.org/wiki/Alias_%28Mac_OS%29 . Зокрема, розділ "Запобігання збоїв псевдонімів", а також висловлювання "Це схоже на символьне посилання Unix, але з додатковою перевагою роботи, навіть якщо цільовий файл переміщується в інше місце на те ж саме диск "," Оригінал можна перемістити в інше місце в межах однієї файлової системи , не порушуючи посилання. "
Robert S Ciaccio

Відповіді:


3

Ось мій удар по вирішенню цієї проблеми з Applescript. Наступний скрипт скриптів візьме обрані псевдоніми у вікні Finder і спробує відновити їх на новий шлях заміни Backup с External у шляху POSIX.

Сподіваюся, що це просто. Можливо, ви можете зробити його рекурсивним, щоб шукати псевдоніми в вибраних папках, але це більше роботи, ніж я хочу зробити - і тоді виникає проблема роботи з псевдонімами папок. Речі можуть стати брудними. ;-)

Сподіваюся, що це допоможе.

tell application "Finder"
    set these_items to the selection
end tell

repeat with i from 1 to the count of these_items
    set this_item to (item i of these_items) as alias
    set this_info to info for this_item

    if class of this_item is alias then
        tell application "Finder"
            set original_file to original item of this_item
            set this_alias_file_name to displayed name of this_item
            set container_folder to container of this_item

            set the_path to the POSIX path of (original_file as alias)
            set new_path to my replaceText("/Backup/", "/External/", the_path)

            move this_item to trash
            try
                make new alias file at container_folder to (POSIX file new_path) with properties {name:this_alias_file_name}
            on error errMsg number errorNumber
                if errorNumber is -10000 then -- new original file not found, try relinking to old
                    try
                        make new alias file at container_folder to (POSIX file the_path) with properties {name:this_alias_file_name}
                    on error errMsg number errorNumber
                        if errorNumber is -10000 then -- old original not found. link's dead Jim
                            display dialog "The original file for alias " & this_alias_file_name & " was not found."
                        else
                            display dialog "An unknown error occurred:  " & errorNumber as text
                        end if
                    end try
                else
                    display dialog "An unknown error occurred:  " & errorNumber as text
                end if
            end try
        end tell
    end if
end repeat

on replaceText(find, replace, subject)
    set prevTIDs to text item delimiters of AppleScript
    set text item delimiters of AppleScript to find
    set subject to text items of subject

    set text item delimiters of AppleScript to replace
    set subject to "" & subject
    set text item delimiters of AppleScript to prevTIDs

    return subject
end replaceText

Велике спасибі за цей сценарій! Я не експерт з Applescript, тому не буду намагатися оновити його. Я думаю, що можливе рішення лежить між Applescript та bash з його потужним find. Знову дякую!
mouviciel

Не можу сказати, що це відповідь, але я намагаюся запустити сценарій вище, і я отримую помилку, кажучи, що вона не може отримати оригінальний елемент псевдоніма. Тим не менш, коли я вручну зробити отримати інформацію для файлу в питанні, я бачу "Оригінал" значення на дисплеї. Відповідний фрагмент: якщо клас this_item є псевдонімом, скажіть застосунку "Finder", встановивши оригінальний файл на оригінальний елемент this_item.

ghoppe thx з Нідерландів Ваш сценарій був для мене найкращим, в результаті чого відмінна робота! Привіт з Голландії до Канади ;-) Робін

2

Назвіть диск назад до резервної копії? Серйозно, я думаю, що це був би найшвидший спосіб вирішення проблеми. Або ви можете написати сценарій оболонки, який рекурсивно знаходить всі псевдоніми, які вказують на "Backup" і відтворюють їх, щоб вказувати на нове ім'я ...

редагувати

Перевіряти http://sveinbjorn.org/osxutils_docs , mkalias зокрема.


Моя нова резервна копія називається "Резервне копіювання" ... Ідея сценарію оболонки - це те, що я маю на увазі, але я не знаю інструменту, здатного відображати та змінювати зміст аліасу.
mouviciel

mkalias виглядає цікаво! Але остання версія датується 2003 і технічна примітка згадується для Mac OS 9 ... Якщо я не знаходжу нічого іншого, я постараюся оновити його для Snow Leopard ...
mouviciel

1

Нещодавно мені довелося вирішити ту ж саму проблему, і написав цей код ruby, щоб виправити всі псевдоніми рекурсивно .

Я вставлю його тут:

#!/usr/bin/ruby

# these are the folders containing all your images
if ARGV.size == 2
  dir_base     = ARGV[0]
  alias_folder = ARGV[1]
else
  puts "usage $0 dir_with_all_files sub_dir_containing_broken_aliases"
  puts "  or pass -d to use defaults:  ~/img  background"
  if ARGV[0] && ARGV[0] == '-d'
    dir_base     = File.expand_path '~/img'
    alias_folder = 'background'
  end
end

# list of all alias file paths, dirs excluded
alist = Dir.glob("#{dir_base}/#{alias_folder}/**/*").
            select{|w| w.scan('.').any? }

# a list of all file paths, alias fodler contents excluded
flist = Dir.glob("#{dir_base}/**/*").
            reject{|w| w.scan("#{dir_base}/#{alias_folder}").any? }

# forcably create new aliases by overwriting old files
alist.each do |f| 
  flist.each do |w| 
    `ln -fs #{w.gsub(' ','\ ')} #{f.gsub(' ','\ ')}` if w.split('/').last == f.split('/').last
    puts "linked #{w.gsub(' ','\ ')}  to  #{f.gsub(' ','\ ')}"
  end
end

+1 Хоча я вже вирішив власну проблему, я вважаю, що ваш внесок буде корисним для інших. Дякую.
mouviciel

0

Його проблема не з назвою "Backup". Те ж саме відбувається і з контекстним меню "Порівняти файли" (я думаю, що це питання) і, звичайно, з файлами, відкритими з DreamWeaver. Існує деяка зміна / виправлення в ОС Apple, тому що DW намагається відкрити той самий файл в Chrome без "Volume" перед іменем розділу, і той же файл, відкритий в Chrome, показує "Volume", який працює.

Отже, або Adobe, або Apple зробили зміни або зробили виправлення на шляху, який вони вказують / викликають розділ, відмінний від завантажувального диска в тому ж диску.

Так у випадку з ОП, ім'я резервного копіювання диска. Проблема полягає в тому, що псевдоніми додано "Volume". Я думаю, що в якийсь момент стартовий диск мав на увазі НЕ включити "Томи", а пізніше вони виправили його для Finder та інших явних місць, але вони ще не дійшли до псевдонімів.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.