我拍摄RAW + JPG,即NEF和JPG。在查看了数百张图像(使用一个简单的程序)并删除JPG之后,我有了许多不必要的剩余NEF文件。如果有脚本删除目录中的所有孤立NEF文件,那将非常有帮助。我在这里读到了一个类似的问题:“ 如何删除JPG文件,但仅在匹配的RAW文件存在的情况下? ”,并且与命令提示符一起提供的解决方案效果很好。我想知道是否有人可以解决我的困境?
我拍摄RAW + JPG,即NEF和JPG。在查看了数百张图像(使用一个简单的程序)并删除JPG之后,我有了许多不必要的剩余NEF文件。如果有脚本删除目录中的所有孤立NEF文件,那将非常有帮助。我在这里读到了一个类似的问题:“ 如何删除JPG文件,但仅在匹配的RAW文件存在的情况下? ”,并且与命令提示符一起提供的解决方案效果很好。我想知道是否有人可以解决我的困境?
Answers:
我用Python编写了一个脚本来为我完成工作。它被称为remove-orphaned-raw-images.py
,我在Github上发布了它。
基本上,它会遍历给定文件夹中的所有文件,然后将孤立的原始图像(在我的情况下是*.CR2
与JPEG不匹配的文件)移动到备份文件夹中。(可选)您可以告诉脚本实际删除文件。
这是算法的概述:
-h
在命令行上使用帮助选项运行时,该工具将告诉您如何使用它。
我也遇到了这个问题,这就是我编写此工具的原因。我正在使用DSLR拍摄JPEG或RAW + JPEG图像,而不仅仅是RAW。在整理模糊或其他不良照片时,我使用JPEG快速查看它们并删除不良照片。这使我留下了删除了匹配的JPEG的RAW图像(有原因)。
使用您提到的问题-我已经为您编写了一个脚本
好的警告!小心此脚本!-进行备份
1)制作一个名为clean.bat的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
基本上,脚本的流程是
请,请测试一下!
更新:对脚本进行了更改,以处理其中包含空格的文件夹
这是我的python脚本,用于删除cr2的w / oa 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")