我想删除所有原始图像文件(图片图像),没有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"
代码假定原始文件和jpg文件位于单独的文件夹中,这很好。不过,将它们放在同一个文件夹中会稍微方便一些。
基本上,我想知道怎么写这个剧本。我在用Mac 15 Catalina的终端。
发布于 2020-07-17 19:01:06
因为这些文件位于同一个目录中,所以让我们保持简单。
#!/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
,以便在实际执行脚本之前查看操作是否正确。
发布于 2020-07-17 20:40:49
如果你的文件和你写的一样,你可以找到你需要的所有文件。
\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
将其发送给计数,删除所有有两个实例的文件,删除1个并添加扩展名CR3
。
https://unix.stackexchange.com/questions/599058
复制相似问题