在 上Ubuntu 20.04.3 LTS
,我在 bash 中的 nvim 中工作。我打开了多个终端选项卡。工作目录中有一个.git
目录。在某个时候,关闭一个终端选项卡后,我注意到我正在工作的目录不再存在。
sudo find / -name "some-file.txt"
我通过从主目录运行来检查我是否意外移动了目录 ,其中some-file.txt
有一个文件名,我确信它位于丢失的目录中。
我仔细检查了 bash 历史记录,在执行完最后一个git commit
和最后一个命令后git rebase -i HEAD --root
,只有指示我搜索丢失目录的命令。我记得在交互式变基中我重命名了初始提交。如果我在那里做错了什么(例如:drop
所有提交),这仍然不能解释整个目录被删除的原因。
我知道,这是一个非常普遍的问题。但由于问题的性质,我无法提供更多详细信息或重现该错误。
这可能是什么原因呢?(每当我尝试访问rm -r
包含提交的存储库的目录时.git
,系统都会要求我确认删除提交rm: remove write-protected regular file ...
。当我以身份运行此命令时不会发生这种情况sudo
,但我很确定我没有输入密码。在 bash 历史记录之上,这让我认为我没有意外删除所有目录。)
我该怎么做才能恢复我的数据?我没有推动,我已经设法将文件存储在打开的 vim 缓冲区中,以便自己回答最明显的部分。
答案1
找到原因:
nvim
还附带了几个可以执行此操作的命令(和预安装的扩展)。如果您正在尝试找出删除的原因,请nvim
同时检查您的日志。
数据恢复:
您提到了一个.git
目录。您的目录有 git 远程吗?如果有,只需将其克隆到本地即可解决问题。
如果没有,请检查名为的目录,看看".trash-{$USER_ID}"
原始文件是否位于已安装的外部驱动器上,否则.local/share/Trash
。它可能在那里(除非rm
用于删除。在这种情况下,除非您正在备份文件系统,否则它可能已经消失了。)
保护您的系统免受此问题的影响:
这就是为什么您经常会看到这里的用户推荐频繁的计划备份。我个人使用Timeshift
和的组合rsync
。
Timeshift
可以通过 apt 下载。它主要用于备份您的系统文件和配置,并允许您设置定期备份计划。如果您即将执行一些有风险的操作,您还可以运行手动备份。
rsync
Ubuntu 附带。它只是一个基本的命令行工具,用于通过网络复制文件和目录(尽管它也可以在本地执行此操作)。
Rsync
它主要不是作为独立的备份程序,至少不是以现在Timeshift
或Weresync
现在的方式。但是,它在备份方面非常简单和有效,许多更全面的解决方案都在内部使用它来实现此目的。
的缺点rsync
是没有“设置完毕,忘掉它”方法内置。但是,Ubuntu 包管理器提供了更多的备份选项,每个选项都有自己的特点。
此时推荐积极的备份策略可能有些陈词滥调,但正如您所见,它是陈词滥调是有充分理由的。