如何按名称模式搜索文件并执行目录命令?及PDF检查脚本异常咨询
问题2:排查脚本中路径被误执行的异常输出
从你的描述来看,大概率是脚本里不小心把目录路径变量直接当成命令来执行了——比如你可能写了$dir而不是echo "$dir",系统会尝试把这个目录名当作可执行命令运行,自然会抛出“命令不存在”之类的异常。
先看你可能踩坑的错误写法
# 错误示例!会导致路径被当作命令执行 find . -name "*发票*.pdf" | while read file; do dir=$(dirname "$file") if [ ! -f "$dir/thumbnail.jpg" ]; then $dir # 这里错了!直接写$dir会让系统执行这个"命令" echo "$dir" fi done
修正后的健壮脚本
下面的版本解决了空格、特殊字符等潜在问题,同时避免了误执行路径的情况:
#!/bin/bash # 搜索所有含"发票"的PDF文件 find . -name "*发票*.pdf" -type f | while read -r file; do # 获取文件所在目录,双引号包裹避免空格/特殊字符拆分 dir=$(dirname "$file") # 检查目录下是否存在缩略图(这里假设缩略图是thumbnail.jpg,可按需调整) if [ ! -f "$dir/thumbnail.jpg" ]; then # 正确打印目录,不要单独写$dir echo "$dir" # 后续可以添加生成缩略图的命令,比如用convert(需安装imagemagick): # convert "$file" -thumbnail 200x200 "$dir/thumbnail.jpg" fi done
更简洁的优化写法
用find的-execdir可以省去手动取目录的步骤,自动切换到文件所在目录:
find . -name "*发票*.pdf" -type f -execdir sh -c ' # 因为-execdir已经切换到文件所在目录,直接检查当前目录的缩略图即可 if [ ! -f "thumbnail.jpg" ]; then echo "$PWD" # 打印当前目录路径 # convert "$1" -thumbnail 200x200 "thumbnail.jpg" fi ' sh {} \;
关键注意事项
- 所有变量引用必须加双引号(比如
"$dir"),防止目录名含空格、特殊字符时被错误拆分 - 绝对不要单独写
$dir这类变量,确保你是用echo打印路径,而不是把它当作命令执行 - 用
read -r读取文件路径,避免转义字符导致的路径解析错误
内容的提问来源于stack exchange,提问作者Aley
相关产品推荐
相关产品推荐

