删除没有 JPG 对应项的 RAW 图像文件

删除没有 JPG 对应项的 RAW 图像文件

我想删除每个没有 JPG 对应项的 RAW 图像文件(照片图像)。

这是我当前的工作流程:

  1. 我的相机为我拍摄的每张照片创建 RAW 和 JPG。
  2. 我查看 JPG 文件,并删除我不需要的文件(因为 JPG 加载速度要快得多)
  3. 我目前手动思考该文件夹,选择任何没有 JPG 对的 RAW 文件(在我的例子中为 *.cr3)(因为我在审阅过程中删除了 JPG)。

在我查看文件之前,文件的外观示例:

IMG_001.JPG
IMG_001.CR3
IMG_002.JPG
IMG_002.CR3
IMG_003.JPG
IMG_003.CR3
IMG_004.JPG
IMG_004.CR3

文件在我审阅之后的样子的示例

IMG_001.JPG
IMG_001.CR3
IMG_002.CR3
IMG_003.JPG
IMG_003.CR3
IMG_004.CR3

IMG_002 和 IMG_004 都缺少 jpg 对应项,这意味着我删除了该 jpg 对应项,现在我想删除原始文件。

我尝试遵循建议这里: 和这里: 但没有用。

这是我现在的代码:

for files in RAW/* 
do 
test="JPG/$(basename ${files::9})JPG"
if [ ! -f "$test" ]
then echo "$files"
fi 
done

或者,流畅的单行版本:

for files in RAW/*; do if [ ! -f "JPG/$(basename ${files::9})JPG" ]; then echo "$files"; fi done

或者,另一衬垫:

For files in RAW/*; [ ! -f "JPG/$(basename ${files::9})JPG" ] && echo "JPG/$(basename ${files::9})JPG"

该代码假设 raw 和 jpg 文件位于不同的文件夹中,这很好。不过,将它们放在同一个文件夹中会稍微方便一些。

基本上,我想知道如何编写这个脚本。我正在 Mac OSX 15 Catalina 上使用终端。

答案1

由于文件位于同一目录中,所以让我们保持简单。

#!/bin/sh
for file in *.CR3; do
    noext=${file%.CR3}
    [ -f "$noext.JPG" ] || rm -- "$file"
done

该脚本循环遍历.CR3当前目录中的所有文件。它从文件名中删除扩展名noext=${file%.CR3}.如果.JPG对应项不存在,则.CR3删除该文件 ( [ -f "$noext.JPG" ] || rm -- "$file)。

您可能需要在和echo之间添加一个,以在实际执行脚本之前查看操作是否正确。||rm

答案2

如果您的文件如您所写,您可以通过以下方式找到您需要的所有文件

\ls -1 *.JPG *.CR3 | cut -d. -f1 | uniq -c | sed '/\<2\>/d
s/^[^I]*\(.*\)/\1.CR3/'

并删除它们。完整的命令将是

rm $(\ls -1 | cut -d. -f1 | uniq -c | sed '/\<2\>/d
s/^[^I]*\(.*\)/\1.CR3/')

实际上,您可以通过 获取每个文件的基本名称cut,将其发送uniq -c到 count,删除具有 2 个实例的所有文件,然后删除 1 个实例并添加扩展名CR3

相关内容