在 MacOS 中同步不同扩展名的文件

在 MacOS 中同步不同扩展名的文件

照片拍摄后,我有两个文件夹:JPG(文件 *.jpg)和 RAW(文件 *.CR2)。通常我会查看 JPG 文件夹并删除那些我不喜欢的。

我想要的是创建一个 bash 脚本来检查:

 for file.cr2 in folder.getFiles
   if file.jpg is NOT in folder2.getfiles 
      delete file.cr2

我看过一些 rsync 的例子,但文件具有相同的扩展名,而且我不太擅长 bash,所以我可以用 C 来做,但我想学习。

答案1

尝试这个:

for file in cr2files/*; do
   test=”jpgfiles/$(basename ${file:: -3})jpg”
   if [ ! –f “$test” ]; then
      echo “$file”
   fi
done

如果它得到您想要的结果,您可以将行 - echo “$file” - 替换为 - rm “$file” -。该行 – test=”jpgfiles/$(basename ${file:: -3])jpg” – 从文件名中删除路径和扩展名,并将其替换为 “jpgfile/filename.jpg” 。请记住将路径名“cr2files”和“jpgfiles”更改为正确的路径名。如果您愿意,可以使用变量或在参数中将路径名传递给脚本。

编辑:

您在“Toshiba ser”中的空间弄乱了基本名称。这是解决方案:

#!/bin /bash
IFS=’’
for file in “$1”/*; do
   test=”$2/$(basename ${file:: -3})jpg”
   if [ ! –f “$test” ]; then
      rm “$file”
   fi
done

像这样调用 ./removephotos.sh “volumes/toshiba ser/raw” “volumes/toshiba ser/jpg”。请注意,第 2 行 IFS='' 中的单引号之间没有任何内容。

相关内容