Ich fotografiere RAW+JPG, nämlich NEF und JPG. Nachdem ich manchmal Hunderte von Bildern (mit einem einfachen Programm) angesehen und die JPGs gelöscht habe, habe ich viele unnötige NEF-Dateien übrig. Wenn es ein Skript zum Löschen verwaister NEF-Dateien im Verzeichnis gäbe, wäre das sehr hilfreich. Ich habe hier eine ähnliche Frage gelesen " Wie lösche ich JPG-Dateien, aber nur wenn die passende RAW-Datei existiert? " und die mit der Eingabeaufforderung vorgestellte Lösung funktioniert sehr gut. Ich habe mich gefragt, ob für meine missliche Lage eine verfügbar ist?
Ich habe ein Skript in Python geschrieben , um die Arbeit für mich zu erledigen. Es heißt remove-orphaned-raw-images.py
und ich habe es auf Github veröffentlicht .
Grundsätzlich durchläuft es alle Dateien in einem bestimmten Ordner und verschiebt verwaiste Rohbilder (in meinem Fall *.CR2
Dateien ohne passendes JPEG) in einen Sicherungsordner. Optional können Sie das Skript anweisen, die Dateien tatsächlich zu löschen.
Hier ist ein Überblick über den Algorithmus:
Das Tool erklärt Ihnen, wie Sie es verwenden, wenn es mit der Hilfeoption -h
in der Befehlszeile ausgeführt wird.
Dieses Problem ist auch bei mir aufgetreten, weshalb ich dieses Tool geschrieben habe. Ich verwende meine DSLR, um JPEG- oder RAW+JPEG-Bilder aufzunehmen, niemals nur RAW. Beim Aussortieren verschwommener oder anderweitig schlechter Aufnahmen verwende ich die JPEGs, um sie schnell anzusehen und die schlechten zu löschen. Dadurch bleiben mir RAW-Bilder übrig, von denen ich die passenden JPEGs (aus einem bestimmten Grund) gelöscht habe.
Mit der Frage, die Sie erwähnt haben, habe ich Ihnen ein Skript geschrieben
okay warnung! Seien Sie vorsichtig mit diesem Skript! - MACH EIN BACKUP
1) Erstellen Sie eine bat-Datei namens clean.bat und legen Sie sie in das Verzeichnis, mit dem Sie arbeiten möchten
2) Geben Sie dann Folgendes in die bat-Datei ein
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) Öffnen Sie die Eingabeaufforderung als Administrator und navigieren Sie zum Ordner mit der clean.bat 4) Führen Sie clean.bat aus
Grundsätzlich ist der Fluss des Skripts
Bitte, BITTE testen Sie das aus!
UPDATE: Skriptänderung vorgenommen, um mit Ordnern zu arbeiten, die Leerzeichen enthalten
Hier ist mein Python-Skript zum Löschen von cr2-Dateien ohne JPEG.
Es sucht rekursiv innerhalb des aktuellen Verzeichnisses ".". Es berücksichtigt alle Bilder in allen Ordnern.
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")
Ben Parsons
Itai
Benutzer14216
Niemand