照片拍摄后,我有两个文件夹: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='' 中的单引号之间没有任何内容。