You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何编写Shell脚本批量裁剪PDF文件名后16字符并替换原文件

批量裁剪PDF文件名Shell实现方案

前置注意事项

  • 操作前请先备份所有PDF文件,避免误操作导致文件丢失或命名混乱
  • 所有方案请先执行测试逻辑,确认新文件名符合预期后再执行实际重命名
  • 重命名命令默认添加不覆盖参数,若裁剪后出现重名文件会自动跳过,执行结束后可手动处理重名场景

方案1:Bash原生实现(推荐,兼容性最强)

不需要安装任何额外工具,绝大多数Linux发行版、macOS默认的Bash环境都可直接使用。

第一步:测试验证(仅打印修改结果,不实际重命名)

for pdf_file in *.pdf; do
    # 过滤非普通文件,避免无PDF文件时*.pdf未展开的异常
    [ -f "$pdf_file" ] || continue
    new_name="${pdf_file:0:-16}"
    echo "原文件名:$pdf_file -> 新文件名:$new_name"
done

检查输出结果和预期一致后,执行下一步实际重命名。

第二步:执行重命名

for pdf_file in *.pdf; do
    [ -f "$pdf_file" ] || continue
    new_name="${pdf_file:0:-16}"
    # -n参数表示不覆盖已存在的同名文件,--用于兼容开头带-的文件名
    mv -n -- "$pdf_file" "$new_name"
done

方案2:POSIX兼容实现(适用于老旧Shell/非Bash环境)

如果你的设备Bash版本过低不支持负偏移截取,可以用该方案,兼容所有POSIX标准的Shell环境。

for pdf_file in *.pdf; do
    [ -f "$pdf_file" ] || continue
    # 计算文件名总长度
    name_len=$(echo -n "$pdf_file" | wc -c)
    # 截取前 总长度-16 位字符作为新文件名
    new_name=$(echo -n "$pdf_file" | cut -c 1-$((name_len - 16)))
    mv -n -- "$pdf_file" "$new_name"
done

方案3:Perl版rename快速实现(适用于Debian/Ubuntu等系统)

如果你的设备安装了Perl版本的rename工具(Debian/Ubuntu默认自带,macOS可通过brew install rename安装),可以用一行命令完成操作:

rename 's/.{16}$//' *.pdf

注意:该命令不兼容util-linux版本的rename,使用前可执行rename --version确认输出包含perl相关标识再使用。


内容的提问来源于stack exchange,提问作者KaanEm

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.30 05:42:03