Как удалить «неиспользуемые» необработанные файлы, которые не соответствуют .jpg? - Фотопедия
9 голосов
/ 10 апреля 2012

Я снимаю RAW + JPG, а именно NEF и JPG. После просмотра иногда сотен изображений (с помощью простой программы) и удаления файлов JPG у меня появляется много ненужных оставшихся файлов NEF. Если бы в каталоге был скрипт для удаления любых потерянных файлов NEF, это было бы очень полезно. Я прочитал аналогичный вопрос здесь " Как удалить файлы JPG, но только если существует соответствующий файл RAW? ", и решение, представленное с помощью командной строки, работает очень хорошо. Мне было интересно, если один был доступен для моего затруднительного положения?

Ответы [ 3 ]

9 голосов
/ 13 декабря 2012

Я написал скрипт на Python , чтобы сделать работу за меня. Он называется remove-orphaned-raw-images.py, и я опубликовал его на Github .

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

Вот схема алгоритма:

  • Получить список всех файлов в выбранном каталоге.
  • Сортировка этих файлов в файлы RAW и JPEG (добавьте их в отдельные списки).
  • Проверьте для каждого элемента в списке изображений RAW, что в списке JPEG есть совпадение;
    если нет, добавьте это изображение в список необработанных необработанных изображений.
  • Перемещение изображений из списка потерянных изображений в резервную папку
    (или напрямую удалите их, если явно хотите).

Инструмент расскажет вам, как использовать его при запуске с параметром справки -h в командной строке.

Эта проблема также произошла со мной, поэтому я написал этот инструмент. Я использую свою зеркальную фотокамеру для съемки изображений в формате JPEG или RAW + JPEG, а не только в формате RAW. При сортировке размытых или других плохих снимков я использую файлы JPEG, чтобы быстро взглянуть на них и удалить плохие. Это оставляет меня с оставшимися изображениями RAW, из которых я удалил соответствующие JPEG (по причине).

4 голосов
/ 10 апреля 2012

Используя вопрос, который вы упомянули - я написал вам сценарий

хорошо, предупреждение! будьте осторожны с этим сценарием! - СДЕЛАЙТЕ РЕЗЕРВНОЕ КОПИРОВАНИЕ

1) Создайте bat-файл с именем clean.bat и поместите его в каталог, с которым вы хотите работать

2) Затем введите следующее в файл bat

mkdir keep
for /f "delims==" %%r in ('dir /b *.jpg') do move "%%~dpr%%~nr.nef" "%CD%\keep\" 2> nul
move *.jpg "%CD%\keep\"
del *.nef
del *.jpg
move "%CD%\keep\*.*" "%CD%\"
rmdir keep

3) Откройте командную строку от имени администратора и перейдите к папке с clean.bat 4) запустить clean.bat

В основном поток сценария

  • Создайте каталог под названием Keep
  • Переместить все соответствующие файлы NEF в папку хранения
  • Переместить все Jpegs в папку хранения
  • Затем удалите все файлы из исходной папки
  • Переместить файлы назад назад
  • Удалить папку хранения

Пожалуйста, ПОЖАЛУЙСТА, проверьте это!

ОБНОВЛЕНИЕ: Внесены изменения в скрипт для работы с папками, в которых есть пробелы

1 голос
/ 11 марта 2013

Вот мой скрипт на python для удаления cr2 без jpeg.

Поиск в текущем каталоге рекурсивно, ".". Он считает все изображения во всех папках.

import os 
import sys

#Searches through the current directory, recursively, looking for any raw
#and jpeg files. It enumerates the jpegs it finds, without the extension, and
#then enumerates the raw files it finds. If it finds a raw file for which no
#jpeg exists, then it deletes the raw file.
#
# This WILL NOT WORK, if there are files with repeated file numbers.
# this will NOT be an issue if there's only one camera. 

# A dict of filename: (rawpath, jpegpath)
files_seen = {}

for (cur_dir, subdirs, files) in os.walk("."):
  for file in files:
    fname, fext = os.path.splitext(file)
    fext = fext.lower()



    if (fext == ".jpg"):
      content = files_seen.setdefault(fname, [None, None])
      # if it is then filenames have du'ped
      assert(content[1] is None)
      content[1] = os.path.join(cur_dir, file)

    elif (fext == ".cr2"):
      content = files_seen.setdefault(fname, [None, None])
      assert(content[0] is None)
      content[0] = os.path.join(cur_dir, file)

#at the end, we look for raw files without a jpeg,

for key in files_seen:
  (raw_path, jpeg_path) = files_seen[key]

  if jpeg_path is None:
    print("Deleting: %s" % raw_path)
    #os.system("pause.exe")    
    os.unlink(raw_path)

print("Done")
os.system("pause.exe")
...