Так уж исторически сложилось, что я люблю ставить систему “с чистого листа”, а потом восстанавливаю данные по очереди. Да, это всегда долго, но иногда спасает от дальнейших неприятностях.
И вот, я наконец нашел время обновить iPad невесты до iOS 6. Забэкапив данные приложений через ssh, я решил сделать бэкап в iTunes на всякий пожарный. Восстановив на iOS 6 и почти все посстановив, я вдруг понял, что забыл забэкапить GarageBand, в котором невеста часто записывает песни, поэтому данные надо было востановить. Вроде бы задача простая, софта много, но все меняется, если некоторые файлы, которые нужно восстановить, имеют в имени русские символы.

Приложения для извлечения файлов из бэкапа iTunes под OS X:

  • iPhone / iPod Touch Backup Extractor
    Действительно хорошая программа, которая прекрасно справляется со своей задачей и не просит за это денег. Раньше только ей и пользовался. Но есть один минус: будучи разработанной парнем из Ванкувера, она не слыхала про кириллицу, поэтому он файлы, в именах которых содержаться кракозябры, он просто игнорит, а папки преврощает в то, что когда-то называли “кракозябрами”. Например (.band – это папка):
1
2
3
4
5
6
7
8
9
goooseman$ ls /Volumes/DATA/Users/goooseman/Desktop/Backup/com.apple.mobilegarageband/Library/Application\ Support/Documents 
One moment .band
The show.band
Ð?нгел Ñ?Ñ?аниÑ?елÑ?.band
Ð?алÑ?Ñ?иногеннÑ?иÌ?.band
Ð?Ñ?каÑ? кÑ?Ñ?г.band
Ð?Ñ?ониÑ? лÑ?бви.band
Ð?Ñ?Ñ? Ñ?ебÑ?.band
Ð?оÑ?миÑ?еÑ?кииÌ? блÑ?з.band 

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

  • Wondershare Dr.Fone
    Даже говорить про него не хочу, ибо файлы приложений вообще доставить не умеет, а еще и денег хотят.

  • iPhone Backup Extractor
    Название похоже, но программа совершенно другая. Интересно, что для OS X они предлагают запускать exe файл через Mono. ОК, но выглядит оно вот так:
    Под надписью “Select Backup:” должно быть dropdown меню, но именно под макосью его почему то нет, и программа просто выбирает последний бэкап. Поэтому, чтобы выбрать нужный мне бэкап, я просто перенес остальные бэкапы в другую папку. Уже потрясает.
    Но снова же: в именах файлов любой русский символ он заменяет на “_”, то есть получается _____ _________.band
    Снова мимо тазика… Да еще и платная… Да и не работает выбор бэкапа…

  • iBackUpBot
    В общем приложение хорошое, если бы не страшный дизайн и проблема, про которую я поговорю дальше, все было бы идеально. Оно быстрое, оно даже умеет показывать иконки и имена приложений. Но…
    Я могу понять, почему программы не работают с русскими именами файлов, но то, почему эта программа извлекает файлы без путей, я понять не могу. Правда все не так страшно. Ибо путь она прописывает в имени файла, заменяя “/” нижним подчеркиванеим.
    Например, в папке приложения GarageBand есть папки Documents и Library, во второй же есть еще много папок и файлов. В самой программе все показывается весьма нормально:

    Но после распаковки:

    Одно хорошо: русские имена распаковываются нормально. Но, в чем смысл такой распаковки без путей, я понять не могу. К счастью, все не сложно исправить. Вот пример имени файла:

1
Library_Application Support_Documents_Ирония любви.band_Media_Audio Recorder#15

То есть надо вместо “_” подставить “/”, и правильно их скопировать. В этом нам поможет маленький скрипт на Python. Приступаем:
1. Запускаем Automator, выбираем приложение. (Можно и службу, но зачем создавать лишнюю службу для одноразового действия?) Назвать можно iBackUpBotHelper. 2. Добавляем “Утилиты=>Запустить shell-скрипт”. В качестве shell выбираем /usr/bin/python, а ввод передаем как аргументы. 3. Добавляем скриптик:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
import sys
import shutil
import os

for f in sys.argv[1:]:
  arr = f.split('_')
  l = []
  i = 0
  for element in arr:
      l.append(arr[i]+"/")
      i = i + 1
  dest = ''.join(l)
  del(l[-1])
  fol = ''.join(l)
  dest = dest[:-1]
  fol = fol[:-1]
  mkdir = "mkdir -p \"" + fol + "\""
  print mkdir
  os.system(mkdir)
  cp = "cp \"" + f + "\" \"" + dest + "\""
  print cp
  os.system(cp)
  • Сохраняем и перетягиваем файлы на новое приложение.

Почему я использовал mkdir и cp через os.system, а не родные средства питона? mkdir -p создает все дерево папок, то есть в случае mkdir -p /tmp/test/temp даже если папки /tmp/test или даже папки /tmp нету, создается все дерево папок. Ну а раз я уж начала создавать папки через os.system, то и скопирую через него же.

На выходе получаем:

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

Комментарии