如何从file命令输出中提取PDF、GIF等指定文件类型内容
解决方案
你可以直接修改C代码中的execl调用,借助Shell管道命令直接处理file的输出,无需额外编写解析逻辑,实现指定类型提取。
核心实现逻辑
我们需要调用Shell执行组合命令,完成以下步骤:
- 用
file命令检测文件类型 - 用
grep匹配你指定的7种文件类型,仅输出匹配到的内容 - 匹配到的第一个结果写入
stdout.txt(避免单文件匹配到多个关键字的情况)
注意:
file命令输出JPG格式时通常显示为JPEG,实现中已做兼容匹配。
修改后的C代码片段
int fd = open("stdout.txt",O_CREAT|O_WRONLY|O_TRUNC,0666); dup2(fd, STDOUT_FILENO); // POSIX标准标准输出宏为STDOUT_FILENO,如果你原有代码定义了STDOUT宏可直接保留 close(fd); // 调用sh执行管道命令 execl("/bin/sh", "sh", "-c", "file \"$0\" | grep -Eo '(PDF|GIF|JPEG|PNG|MP4|ZIP|HTML)' | sed 's/JPEG/JPG/' | head -n1", argv[2], NULL);
命令参数说明
-E:启用grep的扩展正则匹配-o:只输出匹配到的内容,不输出整行sed 's/JPEG/JPG/':将file输出的JPEG替换为你需求指定的JPGhead -n1:只取第一个匹配结果,避免单个文件触发多个关键字匹配- 用
$0传递argv[2]参数,避免文件名含特殊字符、空格时的解析错误
效果验证
如果检测的是GIF文件,最终stdout.txt里只会保留GIF字符串;如果检测的文件不属于指定的7种类型,stdout.txt会为空。
内容的提问来源于stack exchange,提问作者Lucas Gomes
相关产品推荐
相关产品推荐

