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

误在根目录执行文件移动脚本,求助恢复文件原始位置

误在根目录执行文件移动脚本,求助恢复文件原始位置

兄弟,看到你这操作我都替你捏一把汗!在根目录跑这种递归移动的脚本可太危险了,不过先别慌,咱们一步步来看看能不能把文件救回去:

紧急第一步:停止写入操作

先别碰hidden_files里的任何文件,也别在系统里创建、修改新文件——任何写入都可能覆盖磁盘上残留的原始路径信息,先把系统的写入降到最低,最好能把硬盘挂载成只读模式(如果是物理机的话,可以用Live CD启动;虚拟机的话先做个快照)。

尝试这些恢复方法

1. 检查系统审计日志(如果启用了的话)

很多Linux发行版默认会启用auditd服务,它会记录系统里的文件操作。你可以试试:

  • 先查看审计日志里的mv操作记录:
    ausearch -x mv | grep hidden_files
    
    这条命令会过滤出所有和hidden_files相关的移动操作,里面应该能看到每个文件的原始路径和目标路径。
  • 如果ausearch没结果,直接看审计日志文件:
    grep "mv" /var/log/audit/audit.log
    
    日志里的obj字段是源路径,target字段是目标路径,慢慢找相关的记录就行。

2. 利用文件的元数据反向匹配(同一文件系统下)

如果hidden_files和根目录在同一个文件系统(绝大多数情况都是),移动文件不会改变文件的修改时间。假设你记得脚本大概的执行时间(比如今天下午2点),可以找出所有在那个时间点附近被操作过的文件,对应着移回原路径:

find / -type f -newermt "2024-05-20 14:00" ! -newermt "2024-05-20 14:10"

这条命令会列出下午2点到2点10分之间被修改/移动过的文件,这些大概率就是被你转移的文件,你可以手动把它们移回对应的路径。

3. 使用文件恢复工具(终极手段)

如果上面的方法都不行,就得靠专业的恢复工具了,比如testdisk或者photorec:

  • 先安装工具(如果还能正常操作的话):
    sudo apt install testdisk  # Debian/Ubuntu
    sudo dnf install testdisk  # RHEL/CentOS
    
  • 运行testdisk,按照提示选择你的硬盘,然后选择文件系统,进入“Advanced”模式,选择“List”查看可恢复的文件和目录结构,找到被移动的文件的原始路径,然后恢复它们。
  • 注意:一定要在只读模式下操作,最好用Live CD启动系统再恢复,避免覆盖数据。

事后预防措施

这次算是个惨痛的教训,以后写这种批量操作的脚本一定要加防护:

  • 在脚本开头加目录检查,只允许在指定目录执行:
    TARGET_DIR="/path/to/your/latex/project"
    if [ "$PWD" != "$TARGET_DIR" ]; then
        echo "Error: Please run this script in $TARGET_DIR"
        exit 1
    fi
    
  • 执行脚本前先pwd确认当前目录,或者用cd命令直接切换到目标目录再执行脚本。
  • 批量操作前先加echo测试,比如把-exec mv {} ...改成-exec echo mv {} ...,先看看会移动哪些文件,确认没问题再去掉echo。

备注:内容来源于stack exchange,提问作者Mc_PanBagnat

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.17 11:43:02