首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >删除没有JPG对应的原始图像文件

删除没有JPG对应的原始图像文件
EN

Unix & Linux用户
提问于 2020-07-17 18:45:51
回答 2查看 276关注 0票数 1

我想删除所有原始图像文件(图片图像),没有JPG对应。

下面是我当前的工作流程:

  1. 我的相机为我拍摄的每一张照片创建了一个原始的和一个JPG。
  2. 我检查JPG文件,删除我不想要的JPG文件(因为JPGs加载速度快得多)
  3. 目前,我手动地考虑了这个文件夹,选择了任何没有JPG对的原始文件(在我的例子中是*.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对应文件,现在我想删除原始文件。

我试着遵循这里:和这里的建议,但都没有效果。

这是我现在的代码:

代码语言:javascript
运行
复制
for files in RAW/* 
do 
test="JPG/$(basename ${files::9})JPG"
if [ ! -f "$test" ]
then echo "$files"
fi 
done

或者,流畅的单行版本:

代码语言:javascript
运行
复制
for files in RAW/*; do if [ ! -f "JPG/$(basename ${files::9})JPG" ]; then echo "$files"; fi done

或者,另一个班轮:

代码语言:javascript
运行
复制
For files in RAW/*; [ ! -f "JPG/$(basename ${files::9})JPG" ] && echo "JPG/$(basename ${files::9})JPG"

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

基本上,我想知道怎么写这个剧本。我在用Mac 15 Catalina的终端。

EN

回答 2

Unix & Linux用户

发布于 2020-07-17 19:01:06

因为这些文件位于同一个目录中,所以让我们保持简单。

代码语言:javascript
运行
复制
#!/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
EN

Unix & Linux用户

发布于 2020-07-17 20:40:49

如果你的文件和你写的一样,你可以找到你需要的所有文件。

代码语言:javascript
运行
复制
\ls -1 *.JPG *.CR3 | cut -d. -f1 | uniq -c | sed '/\<2\>/d
s/^[^I]*\(.*\)/\1.CR3/'

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

代码语言:javascript
运行
复制
rm $(\ls -1 | cut -d. -f1 | uniq -c | sed '/\<2\>/d
s/^[^I]*\(.*\)/\1.CR3/')

实际上,您是通过cut获取每个文件的基本名称,通过uniq -c将其发送给计数,删除所有有两个实例的文件,删除1个并添加扩展名CR3

票数 0
EN
页面原文内容由Unix & Linux提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://unix.stackexchange.com/questions/599058

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档