Фотографии Shotwell теряют правки, когда файлы отсутствуют

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

Затем я подумал, что мог бы также импортировать новые фотографии на внутренний жесткий диск моего ноутбука, чтобы избавить меня от необходимости тащить вокруг себя внешний. Поэтому я отсоединил внешнюю, и когда я в следующий раз открыл Shotwell, все фотографии были отмечены как «Пропавшие». Как и ожидалось. Я провел несколько месяцев, импортируя новые фотографии, отмечая их и внося изменения, используя исключительно внешние программы из Shotwell и сохраняя изменения как _modified.jpg. Все прошло отлично, я предполагал, что Shotwell подберет недостающие фотографии, когда в конце концов снова подключит диск.

К моему ужасу, я обнаружил, что все прошло не так гладко, как я хотел. Когда я вернулся домой и снова подключил внешний диск, Shotwell сделал повторное сканирование фотографий - но потерял все ссылки на мои отредактированные фотографии. Я подал ошибку для этого .

У меня есть резервная копия базы данных, в которой корректно хранятся все мои правки, оставшиеся до отпуска, и у меня есть резервная копия базы данных со всеми моими новыми правками. Есть ли способ объединить их, чтобы исправить пропущенные изменения?

П.С. Возвратное сообщение: ВСЕГДА ИМЕЕТ РЕЗЕРВНОЕ КОПИРОВАНИЕ! В Shotwell есть ошибка, из-за которой поле «editable_id» записей в «phototable» базы данных sqlite стирается, когда фотография пропадает. Это легко исправить, восстановив автоматический файл photos.db.bk, но это большая проблема, если вы продолжите импортировать и редактировать фотографии.

0
задан 31 January 2014 в 16:10

1 ответ

Хорошо, я понял это. Основная идея состояла в том, чтобы скопировать новые части базы данных в старую, таким образом, имея полностью рабочую базу данных. Повсеместно я ссылаюсь на «старые» фотографии / базу данных как те, которые работали до удаления хранилища, и «новые» фотографии / базы данных как те, которые работают после определенной даты (которые, вероятно, имеют другое место хранения или были добавлены). после того, как фотографии были удалены) но где "старые" фотографии не работают должным образом. Надеюсь, это имеет смысл. :)

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


Подготовка

Делайте резервные копии всего! Я не шучу, нет никаких гарантий, что это сработает.

Первым шагом является установка sqliteman

sudo apt-get install sqliteman

После этого откройте свою резервную базу данных Shotwell с помощью Sqliteman. Затем введите это в поле ввода:

SELECT id, filename, flags FROM phototable;

Нажмите F9 для запуска команды. Вы должны увидеть ссылки на все ваши фотографии в поле прокрутки. Прокрутите до конца и убедитесь, что на последней фотографии поле "flags" имеет значение "0". Это указывает на то, что файл присутствует и работает в последний раз, когда работал Shotwell. Запишите последнее значение идентификатора. Давайте назовем это «phototable_max».

Теперь удалите предыдущую команду и выполните следующую:

SELECT id, filepath, flags FROM backingphototable;

Здесь показаны все внесенные вами изменения. Опять же, запишите последнее значение идентификатора. Назовите это «backingphototable_max».
Снова удалите команду и выполните следующую команду:

SELECT id, name FROM eventtable;

Вы увидите список событий. Еще раз обратите внимание на последнее значение. Это "eventtable_max". Это становится немного повторяющимся, но теперь удалите команду и выполните это:

SELECT id, name FROM tagtable;

Обратите внимание на самое высокое значение. "Tagtable_max".

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


Время SQLite!

Теперь скопируйте новую базу данных в старую.
Определенно сделайте несколько резервных копий ваших резервных копий . Есть большая вероятность, что вы все испортите. Вы не хотите потерять свою базу данных Shotwell навсегда.

Хорошо, закройте Sqliteman. Пришло время для некоторой работы CLI. Здесь я предполагаю, что ваша старая база данных shotwell находится в "~ / .local / share / shotwell-old / data / photo.db", а новая в "~ / .local / share / shotwell-new / data / photo" .db "

sqlite3 ~/.local/share/shotwell-old/data/photo.db

Теперь у вас будет приглашение SQLite. В это введите:

ATTACH "/home/sean/.local/share/shotwell-new/data/photo.db" AS new;

Не забывайте; и, очевидно, заменить "Шон" с вашим именем пользователя. И да, вы должны использовать полный путь.

Теперь мы можем просто выполнить эти команды, и все готово! Вы должны заменить значения _max на те, которые вы отметили ранее.

INSERT INTO phototable SELECT * FROM new.phototable WHERE new.phototable.id > phototable_max;
INSERT INTO backingphototable SELECT * FROM new.backingphototable WHERE new.backingphototable.id > backingphototable_max;
INSERT INTO eventtable SELECT * FROM new.eventtable WHERE new.eventtable.id > eventtable_max;
INSERT INTO tagtable SELECT * FROM new.tagtable WHERE new.tagtable.id > tagtable_max;
DELETE FROM videotable;
INSERT INTO videotable SELECT * FROM new.videotable;

То, что мы делаем здесь, - это копирование всех новых значений в старую рабочую базу данных из рабочей части новой базы данных. Последние две строки удаляют, а затем копируют видеостол, который прекрасно разбирается при восстановлении отсутствующих файлов.

Затем нажмите Ctrl + D, чтобы закрыть интерпретатор sqlite3.

Теперь вы можете переместить файл photo.db в папку Shotwell, в «~ / .local / share / shotwell / data / photo.db» и открыть Shotwell, и все должно работать! Убедитесь, что ваш жесткий диск или внешнее хранилище подключены на этот раз.


Я обнаружил, что Shotwell бежал немного медленно, как только я впервые открыл его, но в конечном итоге он все-таки перепрятал все и снова начал работать.

Кроме того, обратите внимание, что я думаю, что из-за того, как мы скопировали таблицу тегов и существующие теги, примененные к новым фотографиям, были бы потеряны. Любые новые теги должны сохраняться, и все старые теги на старых фотографиях также сохранятся. Это происходит из-за странного способа, которым Shotwell хранит информацию о тегах - каждая запись тега в базе данных хранит фотографии, которые она помечает. [Тысяча сто тридцать два]

0
ответ дан 31 January 2014 в 16:10

Другие вопросы по тегам:

Похожие вопросы: