我开始下载一个大文件,不久前不小心将其删除了。我知道如何通过cp
ing获取其当前内容/proc/<pid>/fd/<fd>
,但由于下载仍在进行中,当我将其复制到其他地方时,它会不完整。
我可以在下载完成时但在下载程序关闭文件之前以某种方式抢救文件吗?
答案1
在跟随模式下使用tail
应该可以让你做你想做的事。
tail -n +0 -f /proc/<pid>/fd/<fd> > abc.deleted
我刚刚做了一个快速测试,它似乎在这里有效。您没有提到您的文件是否是二进制文件。我主要担心的是,它可能不会从文件开头复制,但 -n +0 参数即使对于二进制文件也应该这样做。
tail 命令可能不会在下载结束时终止,因此您需要自己终止它。
答案2
其实我还有另一个想法。如果您使用另一个命令来读取/proc/<pid>/fd/<fd>
并保持该程序运行,那么当您下载完成时,您可以从/proc/<pid2>/fd/<fd2>
第二个命令的相应文件中复制它。
你试一试
less /proc/<pid>/fd/<fd>
在一个单独的外壳中。查看 /proc 条目中的 less 命令应该会显示已删除的文件。