误在根目录执行文件移动脚本,求助恢复文件原始位置
误在根目录执行文件移动脚本,求助恢复文件原始位置
兄弟,看到你这操作我都替你捏一把汗!在根目录跑这种递归移动的脚本可太危险了,不过先别慌,咱们一步步来看看能不能把文件救回去:
紧急第一步:停止写入操作
先别碰hidden_files里的任何文件,也别在系统里创建、修改新文件——任何写入都可能覆盖磁盘上残留的原始路径信息,先把系统的写入降到最低,最好能把硬盘挂载成只读模式(如果是物理机的话,可以用Live CD启动;虚拟机的话先做个快照)。
尝试这些恢复方法
1. 检查系统审计日志(如果启用了的话)
很多Linux发行版默认会启用auditd服务,它会记录系统里的文件操作。你可以试试:
- 先查看审计日志里的
mv操作记录:
这条命令会过滤出所有和ausearch -x mv | grep hidden_fileshidden_files相关的移动操作,里面应该能看到每个文件的原始路径和目标路径。 - 如果
ausearch没结果,直接看审计日志文件:
日志里的grep "mv" /var/log/audit/audit.logobj字段是源路径,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
相关产品推荐
相关产品推荐

