如何使用Python将file1~file1000批量重命名为file1001~file2000
原命令失效原因
你使用的字符串替换逻辑没有单独提取文件名中的纯序号部分,会导致多位数序号的文件名替换结果错误(例如file10会被错误替换为file10010而非预期的file1010);同时file*通配符默认按字典序排序,会出现file10排在file2前面的问题,进一步打乱重命名顺序。
解决方案
方案1:纯Bash实现(无额外依赖,适配连续文件名场景)
如果确认file1到file1000的文件是连续无缺失的,直接通过seq生成序号循环重命名,逻辑最稳妥:
for i in $(seq 1 1000); do mv -i "file${i}" "file$((i + 1000))" done
方案2:纯Bash实现(适配非连续文件名场景)
如果文件存在缺失,需要遍历现有文件后提取序号计算:
# 按数字自然序遍历所有匹配文件,避免排序混乱 ls -v file* | while read -r filename; do # 提取文件名中的数字序号 ori_num=${filename#file} # 序号加1000生成新文件名 new_name="file$((ori_num + 1000))" mv -i "${filename}" "${new_name}" done
方案3:rename工具实现(更简洁,需Perl版rename)
Debian/Ubuntu等发行版默认预装Perl版本的rename工具,可一行实现需求:
# 先执行以下命令预览重命名结果,确认无误后删除-n参数正式执行 rename -n 's/file(\d+)/"file".($1 + 1000)/e' file*
注意:所有命令中的
-i参数用于重名覆盖前触发确认提示,如果你确认目标路径不存在同名文件冲突,可以去掉-i参数提升执行效率。
内容的提问来源于stack exchange,提问作者Akki
相关产品推荐
相关产品推荐

