我需要的:
该命令删除.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
或之后)的返回代码。从:identify
if
man grep
通常,如果选择了一行,则退出状态为 0;如果没有选择行,则退出状态为 1;如果发生错误,则退出状态为 2。
$?
将此信息与变量包含最后执行的命令的返回代码/值或退出代码/值的知识结合起来。
file image.jpg | grep "RaspberryPi"
echo $?
file
对于包含字符串“RaspberryPi”的结果,上面的行将生成零值(找到匹配项) 。
file image.jpg | grep "Rumpelstiltskin"
echo $?
上面的行将生成值 1 - 不匹配 - 假设file
没有找到字符串“Rumpelstiltskin”的匹配项。