我正在寻找一种只查找 JPEG 文件的方法/由于我对 Linux 的了解有限,我得出了这一点:
- 列出下面从根目录存在的所有路径
find /
- 将结果通过管道传输到下一个命令,并
file
在每个找到的路径上执行该命令xargs file
- 在命令的结果中
file
包含一个 JPEG 字符串,我想也许 IF 语句可以以某种方式仅过滤 JPEG: If (JPEG contains in output of file command) {show argument of file}
再一次:
find / | xargs file | "If statement"
您能否纠正我,给我一个如何执行任务的提示或给出解决方案?
答案1
如果您想列出包含 JPEG 图像的文件,而不管文件名中的扩展名如何,您可以使用find
+file
列出 mime 类型的文件image/jpeg
:
find . -type f -exec sh -c '
file --mime-type "$0" | grep -q image/jpeg\$ && printf "$0\n"
' {} \;
或者
find . -type f -exec sh -c '
mt=$(file --brief --mime-type "$0")
[ -z "${mt#image/jpeg}" ] && printf "$0\n"
' {} \;
答案2
首先,您可以打印带有以下.jpg
文件扩展名的文件:
sudo find / -name *.jpg -print
查看其行为方式,进行修改以适应,然后您可以将输出通过管道传输到另一个函数,而不仅仅是打印输出(如果您愿意)。例如,如果您还想允许.JPG
:
sudo find / -iname "*.jpg"
答案3
这将打印 mime 类型为的所有文件的路径图片/jpeg。
find / -type f -exec file --no-pad --mime-type {} + 2>/dev/null \
| awk '$NF == "image/jpeg" {$NF=""; sub(": $", ""); print}'
有几点需要注意:
- 使用
-exec command {} +
而-exec command {} \;
不是只调用file
一次(而不是每个文件调用一次) - 使用该
--no-pad
选项确保file
的输出格式一致(以使解析更容易) - 用于
2>/dev/null
抑制 stderr offind
,只是必要的,因为运行该命令/
会导致大量“权限被拒绝”错误,从而使控制台变得混乱