Реорганизуйте фотографии от существующей структуры папок в новую структуру

У меня есть каталог photoys, которые были (пере-) организованы прежде в структуру каталогов: год/Месяц/День.

Кроме того, что это не удобная группировка мне, существуют ошибки в нем. Например; в моей папке 2007 с 2010 существуют изображения.

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

То, что я хотел бы сделать, должно вытащить все изображения из их папок и реорганизовать их правильно согласно структуре: год/Месяц. Это помогло бы мне просмотреть, и соединить их в альбомах.

Был бы защищенный от дурака способ сделать это? Кроме того, ссылка на полезное обсуждение форума этого могла помочь мне много.

1
задан 21 July 2018 в 09:00

3 ответа

http://owl.phy.queensu.ca/~phil/exiftool/
Загрузка пакет.
Находят "Инструкции по установке" ( http://owl.phy.queensu.ca/~phil/exiftool/install.html )

Непротестированный сценарий удара, с помощью "exiftool" выше.

$ cat exifto 
#!/bin/bash

exiftool -r \
-d $HOME/Pictures/Original_Images/%Y/%m/%d/%%f.%%e \
 "-filename<filemodifydate" \
 /media/MEMORY_CARD/DCIM/
$

Exiftool может сделать намного больше, чем это.

0
ответ дан 7 December 2019 в 14:01

Сценарий для реорганизации фотографий в/year/month каталоги

Сценарий ниже делает следующее:

  • Это определяет месяц, снимок был сделан
  • В Вашем целенаправленном каталоге это создает (при необходимости) подкаталоги в год (если фотографии были найдены),
  • В этих каталогах года это создает подкаталоги в месяц
  • Если сценарий не может найти соответствующую дату, он создает папку, названную "неопределенной"

Папки в год

enter image description here

Папки Sub в месяц

enter image description here

Обработка дубликатов:

  • Важная вещь состоит в том, чтобы заботиться о дубликатах соответствующим способом: цифровые фотоаппараты делают снимки в столь же именованном ряду (как IMG_1.jpeg, IMG_2.jpeg и т.д.). Поэтому дубликаты должны быть автоматически переименованы, или или сценарий повредится или большое количество фотографии, будет потерян.
    Сценарий переименовывает дубликаты как:

    IMG_1.jpeg, duplicate_1_IMG_1.jpeg, duplicate_2_IMG_1.jpeg etc
    

Как использовать

  1. Использование сценария exif считать метаданные:

    sudo apt-get install exif
    
  2. скопируйте сценарий ниже в пустой файл.

  3. В главном разделе сценария определите каталог, где Вы хотите, чтобы фотографии были скопированы в (предназначенный каталог):

    #---
    save_to = "/targeted/directory"
    #---
    
  4. сохраните сценарий как reorganize.py.

  5. Создайте целенаправленный (превосходящий) каталог при необходимости
  6. Запустите скрипт, с исходным каталогом (папка с Вашими фотографиями) как аргумент, командой:

    python3 /path/to/reorganize.py <source_directory>
    

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

Важные примечания

  • dat формат может отличаться немного на камеру. В сценарии я принял во внимание следующие форматы:

    Datum en tijd       |2013:08:18 15:58:46
    

    и

    Datum en tijd       |2013-08-18 20:21:32
    

    Это могло бы отличаться на других камерах. Если сценарий не работает правильно, необходимо отправить вывод команды exif <image>, но скорее всего, это будет работать, как это должно.

  • Сценарий, поскольку это - копии фотографии в новую (sub) Директорию (Директории), так как Вы, вероятно, не хотите смешивать с исходным каталогом, пока Вы не проверили всех, подходил. Я f Вы хотите переместить файлы однако, заменить строку:

    shutil.copyfile(file, newfile)
    

    :

    shutil.move(file, newfile)
    

Сценарий

#!/usr/bin/env python3
import subprocess
import os
import sys
import shutil

#---
save_to = "/targeted/directory"
#---

directory = sys.argv[1]
if not os.path.exists(save_to):
    os.mkdir(save_to)

get = lambda cmd: subprocess.check_output(["/bin/bash", "-c", cmd]).decode("utf-8")

def check_dir(dr):
    if not os.path.exists(dr):
        os.mkdir(dr)

def rename_dups(target_dir, name):
    n = 1; name_orig = name
    while os.path.exists(target_dir+"/"+name):
        name = "duplicate_"+str(n)+"_"+name_orig
        n = n+1
    return target_dir+"/"+name

for root, dirs, files in os.walk(directory):
    for name in files:
        file = root+"/"+name
        try:
            date = [l for l in get("exif "+'"'+file+'"').splitlines()\
                    if "Dat" in l][0].split("|")[1].split()[0]
            if "-" in date:
                date = date.split("-")[:2]
            elif ":" in date:
                date = date.split(":")[:2]
            targeted_dir = save_to+"/"+date[0]
            check_dir(targeted_dir)
            sub_dir = targeted_dir+"/"+date[1]
        except:
            sub_dir = save_to+"/"+"undetermined"
        check_dir(sub_dir)
        newfile = rename_dups(sub_dir, name)
        shutil.copyfile(file, newfile)
2
ответ дан 7 December 2019 в 14:01

Выполнение его с Утилитой Python

Инструмент был сделан @andrewning для этой точной цели, позволив Вам заботиться об этом, а также любых пограничных случаях, которыми Вы приезжаете

1. Установка

Установка так же проста как выполнение pip install sortphotos

2. Использование

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

sortphotos -r ./source ./destination --sort %Y/%m-%b

Здесь строка формата, данная --sort определяет структуру в который фотографии в source каталог организован в destination каталог, здесь это сортирует файлы как показано ниже:

Строка формата может быть указана, как используется в strftime спецификация с / (наклонные черты вправо), разделяющие подкаталоги

3. Дополнительные примечания

Любой коллизии на имена (т.е. две фотографии с тем же именем в том же месяце) автоматически добавят число им. Если Вы хотите просто моделировать перемещение файлов, чтобы видеть, ли все в порядке, просто используйте -t флаг следующим образом:

sortphotos -tr ./source ./destination --sort %Y/%m-%b

Любые файлы, имеющие допустимые данные EXIF, хранятся в названной подпапке Unknown по умолчанию, но может быть изменен опцией --unknown-dir

0
ответ дан 7 December 2019 в 14:01

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

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