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

使用Python重命名文件时误操作致文件丢失,如何恢复?

如何恢复因重复运行重命名脚本丢失的图片文件?

问题场景

你运行了以下Python脚本批量重命名图片:

import os

i = 0
path = os.chdir("/home/saran/Documents/twitter content")
for file in os.listdir(path):
    if file == "rename.py" :
     continue   
    new_file = "tweet{}.png ".format(i)
    os.rename(file, new_file)
    i = i + 1

第一次运行成功,但重复运行后半数图片丢失——原因确实是重名覆盖:第二次运行时脚本从i=0开始命名,会直接覆盖已存在的tweet0.png、tweet1.png等文件,原文件被新的重命名文件替换,导致永久丢失(除非有备份或快照)。

恢复方法

1. 优先使用系统快照/备份

如果你的Linux系统开启了分区快照(比如Btrfs/ZFS的内置快照,或用Timeshift、Snapper这类工具做了定时备份),直接恢复对应目录的快照即可找回文件,这是最可靠的方式。

2. 使用数据恢复工具

如果没有快照,尝试用专业工具找回,但成功率取决于丢失后是否往该分区写入过新数据(写入越多,恢复概率越低):

  • 立即停止对/home/saran/Documents/twitter content所在分区的写入操作,避免覆盖丢失文件的残留数据。
  • 安装testdisk(包含专门恢复图片的photorec工具):
    # Debian/Ubuntu系
    sudo apt install testdisk
    # RHEL/CentOS系
    sudo dnf install testdisk
    
  • 运行photorec:
    sudo photorec
    
    按照界面提示,选择存储图片的分区,设置扫描范围为“整个分区”,指定恢复的文件类型为图片(勾选PNG等格式),并将恢复的文件保存到另一个分区的目录(不能保存在原分区,避免二次覆盖)。

3. 检查桌面回收站(可能性低)

部分Linux桌面环境的回收站会记录GUI操作的删除,但命令行的os.rename覆盖不属于“删除”操作,所以大概率找不到,但可以快速检查一下。

避免再次出错的改进脚本

为防止重复运行导致覆盖,修改脚本从已存在的最大编号开始递加命名,同时检查目标文件名是否存在:

import os

target_dir = "/home/saran/Documents/twitter content"
os.chdir(target_dir)

# 获取已存在的tweet*.png的最大编号
max_index = 0
for filename in os.listdir(target_dir):
    if filename.startswith("tweet") and filename.endswith(".png"):
        try:
            current_index = int(filename.lstrip("tweet").rstrip(".png"))
            if current_index > max_index:
                max_index = current_index
        except ValueError:
            # 跳过不符合命名规则的文件
            continue

# 从最大编号+1开始命名
current_index = max_index + 1
for filename in os.listdir(target_dir):
    # 跳过脚本自身和已重命名的文件
    if filename == "rename.py" or (filename.startswith("tweet") and filename.endswith(".png")):
        continue
    new_filename = f"tweet{current_index}.png"
    # 保险:如果意外出现重名,自动递增编号
    while os.path.exists(new_filename):
        current_index += 1
        new_filename = f"tweet{current_index}.png"
    os.rename(filename, new_filename)
    current_index += 1

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 07:58:03