У меня есть каталог photoys, которые были (пере-) организованы прежде в структуру каталогов: год/Месяц/День.
Кроме того, что это не удобная группировка мне, существуют ошибки в нем. Например; в моей папке 2007 с 2010 существуют изображения.
Я знаю, что существуют некоторые программы (такие как Shotwell) для организации фотографий, но они борются с большим количеством изображений, которые я имею, и также они все, кажется, поддерживают существующую файловую структуру.
То, что я хотел бы сделать, должно вытащить все изображения из их папок и реорганизовать их правильно согласно структуре: год/Месяц. Это помогло бы мне просмотреть, и соединить их в альбомах.
Был бы защищенный от дурака способ сделать это? Кроме того, ссылка на полезное обсуждение форума этого могла помочь мне много.
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 может сделать намного больше, чем это.
Сценарий ниже делает следующее:
Папки в год
Папки Sub в месяц
Обработка дубликатов:
Важная вещь состоит в том, чтобы заботиться о дубликатах соответствующим способом: цифровые фотоаппараты делают снимки в столь же именованном ряду (как IMG_1.jpeg
, IMG_2.jpeg
и т.д.). Поэтому дубликаты должны быть автоматически переименованы, или или сценарий повредится или большое количество фотографии, будет потерян.
Сценарий переименовывает дубликаты как:
IMG_1.jpeg, duplicate_1_IMG_1.jpeg, duplicate_2_IMG_1.jpeg etc
Использование сценария exif
считать метаданные:
sudo apt-get install exif
скопируйте сценарий ниже в пустой файл.
В главном разделе сценария определите каталог, где Вы хотите, чтобы фотографии были скопированы в (предназначенный каталог):
#---
save_to = "/targeted/directory"
#---
сохраните сценарий как reorganize.py
.
Запустите скрипт, с исходным каталогом (папка с Вашими фотографиями) как аргумент, командой:
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)
Инструмент был сделан @andrewning для этой точной цели, позволив Вам заботиться об этом, а также любых пограничных случаях, которыми Вы приезжаете
Установка так же проста как выполнение pip install sortphotos
После того как Вы устанавливаете его, это существует как команда, названная sortphotos
. Для сортировки фотографий согласно тому, что Вы хотите в вопросе, просто выполняете его как
sortphotos -r ./source ./destination --sort %Y/%m-%b
Здесь строка формата, данная --sort
определяет структуру в который фотографии в source
каталог организован в destination
каталог, здесь это сортирует файлы как показано ниже:
Строка формата может быть указана, как используется в strftime
спецификация с /
(наклонные черты вправо), разделяющие подкаталоги
Любой коллизии на имена (т.е. две фотографии с тем же именем в том же месяце) автоматически добавят число им. Если Вы хотите просто моделировать перемещение файлов, чтобы видеть, ли все в порядке, просто используйте -t
флаг следующим образом:
sortphotos -tr ./source ./destination --sort %Y/%m-%b
Любые файлы, имеющие допустимые данные EXIF, хранятся в названной подпапке Unknown
по умолчанию, но может быть изменен опцией --unknown-dir