Удалите все фотографии, которые не отслеживаются Shotwell.

Вопрос или проблема

У меня есть очень большая фотобиблиотека, охватывающая более 10 лет, управляемая программой Shotwell. Недавно я заметил, что моя файловая система показывает намного больше файлов за 2024 год, чем Shotwell:

  • find -iname "*.jpg" -exec echo 1 \; | wc -l сообщает о 7681 файле
  • Shotwell, при помощи Ctrl-A на всех событиях, сообщает о 3505 фотографиях и 20 фильмах

Я хотел бы избавиться от всех фотографий, не отслеживаемых Shotwell. В идеале было бы хорошо получить сначала их имена, но просто удалить их тоже было бы неплохо. Есть ли способ сделать это?

Я не смог найти способ сделать это из интерфейса Shotwell. Поэтому я использовал sqlite, чтобы извлечь пути ко всем файлам, известным Shotwell.

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

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

sqlite3 ~/.local/share/shotwell/data/photo.db "SELECT DISTINCT filename FROM PhotoTable;" | sort > ~/files-known-by-shotwell
sqlite3 ~/.local/share/shotwell/data/photo.db "SELECT DISTINCT filename FROM VideoTable;" | sort >> ~/files-known-by-shotwell

Список всех файлов в папке с изображениями можно получить, например, используя fd: fd . --type f ~/Images > ~/all-files

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

И, наконец, инструмент comm (ссылка) можно использовать для поиска файлов, доступных, но неизвестных для Shotwell: comm -23 ~/all-files ~/files-known-by-shotwell.

Ответ или решение

Перед вами стоит задача очистки вашей библиотеке фотографий, управляемой через Shotwell, от файлов, которые не отслеживаются этой программой. В соответствии с вашим описанием возникает проблема диссонанса между количеством файлов, подсчитанных в файловой системе, и количеством файлов, которые отображает Shotwell. Можно определить и удалить все фотографии, которые не отслеживаются Shotwell в несколько этапов, используя базы данных Shotwell и командную строку Unix/Linux.

Теория

Shotwell управляет мультимедийными файлами (фотографиями и видео) и хранит информацию о них в базе данных SQLite. Эти данные включают пути к файлам, которые добавлены в библиотеку Shotwell. Однако ситуация может возникнуть, когда в файловой системе остаются фотографии, которые были удалены или никогда не были добавлены в Shotwell, что объясняет расхождение в числах между файловой системой и Shotwell.

Для решения проблемы мы предлагаем использовать утилиту sqlite3 для вытаскивания списка файлов, управляемых Shotwell, и базовые командные утилиты Unix для сравнительного анализа и удаления дубликатов. Важно обратить внимание, что Shotwell для хранения данных о фото и видео использует разные таблицы, поэтому нужно следить за тем, чтобы изъять информацию из обеих.

Пример

Процесс поиска и удаления неотслеживаемых файлов можно разделить на следующие этапы:

1. Извлечение имен файлов из Shotwell:

Используя утилиту sqlite3, вы можете извлечь пути к фотографиям и видео, сохраненным в Shotwell, командой:

sqlite3 ~/.local/share/shotwell/data/photo.db "SELECT DISTINCT filename FROM PhotoTable;" | sort > ~/files-known-by-shotwell
sqlite3 ~/.local/share/shotwell/data/photo.db "SELECT DISTINCT filename FROM VideoTable;" | sort >> ~/files-known-by-shotwell

2. Создание списка всех файлов в вашей папке изображений:

Вы можете использовать инструмент fd или find для генерации списка всех файлов в папке изображений:

fd . --type f ~/Images > ~/all-files

или

find ~/Images -type f > ~/all-files

3. Подготовка списка к анализу:

Оба файла (~/files-known-by-shotwell и ~/all-files) должны быть отсортированы, чтобы использовать утилиту comm, которая позволяет найти разницу между двумя файлами. Найдите файлы, которые существуют в файловой системе, но не отслеживаются Shotwell:

sort ~/all-files | comm -23 - ~/files-known-by-shotwell

Данная команда выведет список файлов, которые существуют в вашей системе, но отсутствуют в базе данных Shotwell.

4. Удаление неотслеживаемых фотографий:

Файлы, не отслеживаемые Shotwell, можно удалить, используя следующую команду:

comm -23 ~/all-files ~/files-known-by-shotwell | xargs rm

Этот шаг удалит все файлы, которые не находятся в Shotwell, оставляя вашу папку изображений синхронизированной с библиотекой Shotwell.

Применение

Использование этого процесса позволяет вам надежно и систематически очищать вашу библиотеку изображений. Это особенно актуально для больших и длительных периодов накопления мультимедиа, предотвращая захламление. Совместное использование SQL-запросов и команд Unix дает возможность оптимизировать управление файлами, снижая риск потери важных данных, известных Shotwell, и удаляя ненужные файлы. Данный подход не только освободит место на диске, но и обеспечит структуру вашей библиотеки, упрощая навигацию и последующее управление вашими фотографиями и видео.

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

Оцените материал
Добавить комментарий

Капча загружается...