如何使用命令行仅列出根目录下的 JPEG 文件?

Abd*_*red 4 find file-command shell-script

我正在寻找一种仅查找 JPEG 文件的方法/由于我对 Linux 的了解有限,我来到了这一点:

  1. 列出从下面根目录存在的所有路径 find /
  2. 将结果通过管道传输到下一个命令并file在每个找到的路径上执行命令xargs file
  3. file命令的结果中包含一个 JPEG 字符串,我想也许可以通过 IF 语句以某种方式仅过滤 JPEG: If (JPEG 包含在文件命令的输出中) {show argument of file}

再一次:

find / | xargs file | "If statement" 
Run Code Online (Sandbox Code Playgroud)

您能否纠正我,给我一个提示如何执行任务或给出解决方案?

don*_*sti 8

如果您想列出包含 JPEG 图像的文件而不管文件名中的扩展名,您可以使用find+file列出 mime 类型的文件image/jpeg

find . -type f -exec sh -c '
    file --mime-type "$0" | grep -q image/jpeg\$ && printf "$0\n"
' {} \;
Run Code Online (Sandbox Code Playgroud)

或者

find . -type f -exec sh -c '
    mt=$(file --brief --mime-type "$0")
    [ -z "${mt#image/jpeg}" ] && printf "$0\n"
' {} \;
Run Code Online (Sandbox Code Playgroud)


sam*_*sam 7

首先,您可以打印带有.jpg文件扩展名的文件:

sudo find / -name *.jpg -print
Run Code Online (Sandbox Code Playgroud)

查看它的行为,修改以适应,然后您可以将输出通过管道传输到另一个函数中,而不仅仅是打印输出(如果您愿意)。例如,如果您还想允许.JPG

sudo find / -iname "*.jpg"
Run Code Online (Sandbox Code Playgroud)

  • `*.jpg` 应该是 `"*.jpg"`,否则它会被 shell 扩展并且不会做你想做的事情。在这种情况下不需要`-print`,因为没有其他事情发生。 (3认同)