适配带前导零的3位序号PDF文件的序列缺失检测脚本改造
检测带前导零的3位序号PDF文件序列缺失的脚本改造方案
当然可以实现!咱们直接把现有脚本的逻辑完全调整过来——原脚本是读取文件内容找缺失序号,和咱们要检测文件名序号的需求不匹配,所以咱们重新针对性写逻辑:
改造后的完整脚本
#!/bin/sh # 初始化状态变量和缺失编号存储字符串 errfound=0 missing_numbers="" # 筛选目录中符合格式的PDF文件,提取序号并按数字排序 sorted_nums=$(ls | grep -E '^[0-9]{3}\.pdf$' | sed 's/\.pdf$//' | sort -n) # 检查是否存在符合条件的文件 start_num=$(echo "$sorted_nums" | head -n 1) end_num=$(echo "$sorted_nums" | tail -n 1) if [ -z "$start_num" ]; then echo "未找到任何带3位前导零的PDF文件(格式如001.pdf)" exit 0 fi # 遍历从起始到结束的所有序号,验证对应文件是否存在 current_num=$start_num while [ "$current_num" -le "$end_num" ]; do # 将数字格式化为带前导零的3位字符串 formatted_num=$(printf "%03d" "$current_num") if [ ! -f "${formatted_num}.pdf" ]; then missing_numbers="${missing_numbers}${formatted_num} " errfound=1 fi current_num=$((current_num + 1)) done # 输出检测结果 if [ "$errfound" -eq 1 ]; then echo "检测到缺失的序列编号:" echo "$missing_numbers" else echo "所有3位序号PDF文件序列完整,没有缺失!" fi exit 0
关键逻辑说明
- 筛选目标文件:用
grep -E '^[0-9]{3}\.pdf$'精准匹配文件名是「3位数字+.pdf」的文件,自动忽略其他格式的文件 - 序号提取与排序:通过
sed去掉.pdf后缀,再用sort -n做数字排序(避免字符串排序导致的010排在9前面的问题) - 自动识别序列范围:从排序后的序号里取第一个和最后一个,确定要检查的序列区间,不用手动设置起始值
- 格式验证:用
printf "%03d"把遍历的数字转换成带前导零的格式,确保和文件名格式一致,再检查文件是否存在
使用注意事项
- 直接在PDF文件所在目录运行脚本即可,或者修改
ls的路径为目标目录(比如ls /your/pdf/directory) - 脚本会自动跳过目录中不符合「3位前导零+pdf」格式的文件,不会影响检测结果
内容的提问来源于stack exchange,提问作者Ron Piggott
相关产品推荐
相关产品推荐

