我从 bash 运行一个程序,并将其输出重定向到文件 (test.out)。该进程由于某些问题(在此上下文中这些问题并不重要)而终止,现在我剩下两个文件:
- 原始输出文件大小
test.out
为 2.1 GB,并且 - 生成的交换文件大小
.test.out.swp
为 19 MB
有没有办法合并这些文件,比如将交换文件附加到原始文件的末尾?
或者,我这样做是错误的吗?交换文件的用途与用于输出/日志的用途不同吗?
答案1
Vim 使用 .swp 文件作为未完成工作的存储区域,这样即使内存无法完全容纳,它也可以编辑非常大的文件。这是从计算机 RAM 非常小的时代遗留下来的,内存无法容纳的大文件更为常见,但它仍然存在,这意味着我们可以编辑数 GB 的文件,而不会耗尽所有可用 RAM 或终止进程。Vim 在完成编辑后会删除 .swp 文件,如果进程异常退出,则保留该文件。
如果你有一个 .swp 文件和一个原始文件,你能恢复丢失的工作。记录如下:
http://vimdoc.sourceforge.net/htmldoc/recover.html
要恢复文件,只需打开原始文件。vim 将注意到该文件已有一个 .swp 文件关联,并会向您发出警告并询问您要做什么。假设您具有写入文件所需的权限,“恢复”应该是给出的选项之一。
或者,您可以启动一个新的 vim 实例(在空白文档上)并使用:recover <file>
指出要恢复的文件的命令。
请注意,.swp 文件的主要用途是作为 vim 的临时存储,使其能够编辑大型文件,而不是恢复。因此,vim 不会记录对文件的写入,如果在编辑期间断电,.swp 文件可能会损坏。幸运的是,vim 中的恢复工具对部分损坏的 .swp 文件具有相当的容忍度,并且仍会尝试尽可能多地恢复文件的丢失更改。???
在恢复的文件中查找三个问号:,因为只要在 .swp 文件中发现损坏,就会插入这些问号。
对恢复结果满意后,您需要手动删除 .swp 文件,以确保在编辑文件时不会继续收到警告。注意不要再次运行恢复过程。
答案2
直接回答
从技术角度回答你的问题:
cat test.out > experiment.out
cat .test.out.swp >> experiment.out
cat
该命令的第一次重定向会创建一个新文件。该命令>
的第二次重定向会将文件附加到现有文件。cat
>>
但实际上experiment.out
可能无法使用,因为你是在把苹果加到橘子里。
替代修复
您可以通过谷歌搜索修复文件:Superuser.com 我如何从 .swpfile 恢复原始文件?简而言之:
vim -r .swp
首先复制所有文件!
如果这不起作用,我会gedit
在单独的选项卡中使用两个文件,然后在第三个选项卡中粘贴从前两个选项卡复制的文本。