fish/bash中ls+pdfinfo命令获取PDF信息报错,求解决方法
问题分析与解决方案
你的命令报错核心原因有两个:一是没有限定只筛选PDF文件,导致最新修改的非PDF文件被传给pdfinfo;二是未处理含空格/特殊字符的文件名,xargs会错误拆分文件名,让pdfinfo读取无效内容。
下面给出几种跨shell(bash/fish通用)的修复方案:
方案1:限定ls只处理PDF文件并兼容特殊文件名
# bash/zsh ls -1t *.pdf | head -n1 | xargs -d '\n' pdfinfo # fish ls -1t *.pdf | head -n1 | xargs -0 pdfinfo
*.pdf仅匹配当前目录下的PDF文件,避免非PDF文件被传入xargs -d '\n'(bash)或xargs -0(fish)强制按换行符拆分输入,确保完整传递含空格/特殊字符的文件名
方案2:用find命令更可靠(推荐)
ls处理特殊文件名时容易出问题,find是更稳妥的选择:
find . -maxdepth 1 -type f -name "*.pdf" -printf "%T@ %p\n" | sort -nr | head -n1 | cut -d' ' -f2- | xargs pdfinfo
各参数作用:
-maxdepth 1:仅搜索当前目录,不递归子文件夹-type f:只匹配文件,排除目录-printf "%T@ %p\n":输出文件的修改时间戳(精确到秒)和完整路径sort -nr:按时间戳倒序排序,最新修改的文件排在最前cut -d' ' -f2-:提取文件名部分,去掉前面的时间戳
排查验证
如果执行后仍报错,可分步排查:
- 单独执行
ls -1t *.pdf | head -n1,确认输出是你预期的PDF文件 - 手动执行
pdfinfo "文件名",验证文件本身是否损坏
内容的提问来源于stack exchange,提问作者LeO
相关产品推荐
相关产品推荐

