Synology NAS上超143字符长文件名批量截断重命名方法咨询
解决方案
前置提醒
- 操作前务必先给对应共享文件夹创建快照,避免误操作导致文件丢失或文件名异常
- 先运行测试命令确认修改范围符合预期后,再执行实际重命名操作
- 命令默认只处理当前目录下的文件(不递归子目录),如果需要递归处理,删除命令中的
-maxdepth 1参数即可
版本1:直接截断总文件名长度到143字符
测试命令(仅打印修改对比,不实际修改)
find . -maxdepth 1 -type f | while read -r f; do fname=$(basename "$f"); dir=$(dirname "$f"); [ ${#fname} -gt 143 ] && echo "原文件名: $fname -> 新文件名: ${fname:0:143}"; done
实际执行命令
find . -maxdepth 1 -type f | while read -r f; do fname=$(basename "$f"); dir=$(dirname "$f"); [ ${#fname} -gt 143 ] && mv -n "$f" "${dir}/${fname:0:143}"; done
mv命令加了-n参数,遇到重名文件会跳过不覆盖,避免误删数据。
版本2:截断同时保留文件扩展名
如果需要保留文件后缀(比如.pdf/.doc等,确保文件可正常打开),可以用以下命令,总文件名长度依然不超过143字符:
测试命令
find . -maxdepth 1 -type f | while read -r f; do fname=$(basename "$f"); dir=$(dirname "$f"); if [ ${#fname} -gt 143 ]; then ext="${fname##*.}"; new_fname="${fname%.*:0:$((143 - ${#ext} -1))}.${ext}"; echo "原文件名: $fname -> 新文件名: $new_fname"; fi; done
实际执行命令
find . -maxdepth 1 -type f | while read -r f; do fname=$(basename "$f"); dir=$(dirname "$f"); if [ ${#fname} -gt 143 ]; then ext="${fname##*.}"; new_fname="${fname%.*:0:$((143 - ${#ext} -1))}.${ext}"; mv -n "$f" "${dir}/${new_fname}"; fi; done
自定义长度说明
如果需要调整为其他长度限制,只需要把命令中的143替换为你需要的数值n即可。
内容的提问来源于stack exchange,提问作者scrimbles
相关产品推荐
相关产品推荐

