Как удалить «неиспользуемые» необработанные файлы, которые не соответствуют .jpg?


10

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


Можете ли вы дать ссылку на этот вопрос здесь? Ответом на это почти наверняка будет сценарий оболочки - возможно, спросите вместо этого SuperUser, потому что если у вас есть хорошее определение того, что вам нужно удалить (по имени файла), это довольно тривиальная задача.
Бен Парсонс

1
На будущее просто используйте Geeqie. Он автоматически удаляет совпадающие файлы RAW и любые другие, которые определяются как файл 'sidecar' на основе конфигурации.
Итай

У меня есть следующие настройки: NEF: \\ Photos \ RAW \ YYYY \ YYYY-MM-DD \ original.nef Jpegs: \\ Photos \ RAW \ YYYY \ YYYY-MM-DD \ original.jpeg В любом случае я могу применить это сценарий к этому?

В Баш: сирота = .nef; Родитель = .jpeg; для f в * "$ orphan"; do F = "$ {f% $ orphan} $ parent"; если проверить! -f "$ F"; затем эхо "Идентифицированная сирота: $ f существует, но не $ F"; Я не могу поверить, как долго и сложно эти другие ответы. Да, я знаю, отвечая в комментарии, но это защищено ...
Никто

Ответы:


9

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

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

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

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

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

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


5

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

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

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 в папку хранения
  • Переместить все JPEG в папку хранения
  • Затем удалите все файлы из исходной папки
  • Переместить файлы обратно
  • Удалить папку хранения

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

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


2
+1 за простое, одноразовое решение! Мне давно нужно это решение. Раньше я разрабатывал команды, вставляя вывод DIR в Excel и используя сложные операторы, такие как vlookup, для генерации отдельных команд, но это удовлетворяет почти все мои потребности. Протестировал сценарий, и он полностью мне подходит. Пришлось обратиться к нескольким ссылкам, чтобы полностью понять скрипт и иметь возможность модифицировать его для других подобных операций.
Джахазиил

Фантастика, ты сэкономил мне часы утомительной работы !!! Я пробовал это несколько раз, и это работает слишком быстро. Это именно то, что я искал.
Al H

@ al-h - не могли бы вы поставить галочку? спасибо
Роб

Роб Я не уверен, что ты имеешь в виду под «пожалуйста, отметьте, пожалуйста, как правильно». Я не вижу где-нибудь, я могу проверить правильную ссылку.
Al H

Я заметил одну вещь. Это не работает с папками на рабочем столе (удаляет все файлы jpg и NEF), поэтому сначала протестируйте. Я использую Windows XP Pro.
Al H

1

Вот мой скрипт на 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")

Просто переименуйте «.cr2» в «.nef»
Питер Пит

Я не знаком с Python, но вижу, что он ссылается на «pause.exe» в последней строке. Значит ли это, что он работает только на Windows? Я думал, что Python не зависит от платформы.
Saaru Lindestøkke

Gday. Файл pause.exe, который я вставил, только для того, чтобы python thingo не исчезал, как только он завершил выполнение, после того, как я дважды щелкнул по нему в проводнике. Вы можете удалить эту строку и вуаля, она будет независимой от платформы. Использование OS-зависимых вещей - плохая практика, и, так как я изначально написал это для себя, я был ленив: D По крайней мере, я не объединял пути с наивными слешами и не использовал специальные функции удаления-файла.
Питер Пит

Он также написан для версий Python 3.x. Если вы хотите, чтобы он был дружественным к 2.x, просто измените всю печать («что-то»), чтобы напечатать «что-то»
Питер Пит
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.