删除使用特定相机拍摄的所有图像

删除使用特定相机拍摄的所有图像

我需要的:

该命令删除.jpg当前目录和子目录中使用 RaspberryPi 相机拍摄的所有文件。

(理想情况下,这应该与 Windows 版的 Git Bash 一起使用,但这会使它更加方便,因此是可选的。)

我尝试过的:

我已经使用过find . -name "*.jpg" -size 24k -delete删除缩略图,并且发现该file实用程序能够显示相机制造商(manufacturer=RaspberryPi)。

例子:

$ file f49100889.jpg
f49100889.jpg: JPEG image data, Exif standard: [TIFF image data,
big-endian, direntries=10, height=0, manufacturer=RaspberryPi, 
model=RP_OV5647, xresolution=156, yresolution=164, resolutionunit=2, 
datetime=2015:06:09 08:15:03, width=0], baseline, precision 8, 
1920x1080, frames 3

背景:

NTFS 驱动器的文件系统已损坏,我使用 testdisk/photorec 恢复了文件。现在我已经获得了文件,但丢失了一些元数据,例如目录结构和文件名。我已经从备份中恢复了最重要的文件,并且希望尽可能多地挽救剩余数据。我需要删除一些垃圾文件,以便更轻松地处理其余文件。

是否可以组合这些命令来实现我的目标?如果是,怎么办?有更好的方法来解决这个问题吗?

提前致谢!

答案1

这是一个简单的方法。以下是名为script.sh的脚本的内容~/bin/

#!/usr/bin/env bash
if (file "$1" | grep "RaspberryPi"); then
    echo "rm $1" # <- safety first: just echo, no delete
    # rm "$1" # <- uncomment to delete, leave the quotes
fi

授予其执行权限 ( chmod 0750 ~/bin/script.sh)。然后找到文件并将结果一次一个地传递给脚本(使用\;,而不是)。+

find ~ -iname *.jpg 2>/dev/null -exec ~/bin/script.sh {} \;

另一个工具identify来自 ImageMagick。该工具描述图像特征并读取图像数据,包括EXIF。它会比 慢得多file,但图像中的信息比 提供的信息多得多file。当file未描述要查找的数据时,它可能会有所帮助。它的用法可能如下。

identify -verbose "$file" | grep "RaspberryPi"

我们可以通过显示返回代码来测试( 在上面的语句中grep使用file或之后)的返回代码。从:identifyifman grep

通常,如果选择了一行,则退出状态为 0;如果没有选择行,则退出状态为 1;如果发生错误,则退出状态为 2。

$?将此信息与变量包含最后执行的命令的返回代码/值或退出代码/值的知识结合起来。

file image.jpg | grep "RaspberryPi"
echo $?

file对于包含字符串“RaspberryPi”的结果,上面的行将生成零值(找到匹配项) 。

file image.jpg | grep "Rumpelstiltskin"
echo $?

上面的行将生成值 1 - 不匹配 - 假设file没有找到字符串“Rumpelstiltskin”的匹配项。

相关内容