我迫切需要运行 Linux 恢复软件foremost
并保留文件名和文件夹结构。您可能知道,程序会用数值重命名恢复的文件,然后将它们列在它生成的名为audit.txt 的文件内的列表中。
我ruby
在这个伟大社区的另一个问题中发现了这个脚本,其中有人试图实现与foremost
我完全相同的事情。有人回答了这个问题,答案中包含一个ruby
脚本,其中包含简单的说明,可在包含audit.txt 文件的文件夹中运行它 - 我已经尝试过此操作,但没有任何反应。我在跑步时foremost
和完成后都尝试过,但没有任何反应。当我尝试运行ruby
下面看到的脚本时,我根本没有得到任何终端输出。
File.read("audit.txt").scan(/-{4,}\n(File: .*?\n.*?)(?=-{4,})/m).flatten.map{|z|
f1=z.scan(/File: (.*?)\n/).flatten[0];
f2=z.scan(/[0-9]+:\t(.*?) \t/m).flatten;
extension=File.extname(f1);
[
f1,
f2.find{|q| File.extname(q)==extension}
]
}.each{|k,v|
extension=File.extname(k);
dirname=extension.sub(".","")
File.rename("#{dirname}/#{v}","#{dirname}/#{k}")
}
有其他人知道如何使用该程序foremost
并保留文件名和文件夹结构吗?我能够做到这一点非常重要,因为这似乎foremost
是唯一一个能够恢复我的文件的恢复程序,并且我已经在 Linux 和 Windblows 之间尝试了大约 30 多个不同的恢复程序。
答案1
嗯,这就是数据恢复的问题,不是吗?
文件系统了解元数据,例如文件夹结构和文件名,最重要的是了解位置(文件大小、磁盘上的偏移量、每个数据段是否存在碎片等)。
如果文件系统已失效,并且您求助于雕刻原始数据(这就是foremost
、photorec
和其他此类工具所做的),则无法保留文件名。
最多你可以从你雕刻的数据中生成新的文件名(如果是 JPEG,基于 EXIF 数据,如果是 ZIP/TAR 存档,如果你解压它们,里面会有文件名,代码文件有时有关于项目名称和作者的有用标题, ETC。)。
但对于任何不包含自身元数据的文件类型,没有文件名,因为只有文件系统本身知道。
一个好的文件雕刻器会告诉您找到每个文件的偏移量,也许文件系统元数据中的某些内容将允许您提取给定偏移量的文件名(理论上,如果文件被硬链接,或者只是重命名并且旧的元数据保留在磁盘上)。
但这需要此类元数据仍然存在,并且某人或某物能够理解特定文件系统的内部结构,以便能够正确解释此类元数据。所以基本上,为了保留原始文件夹和文件名结构,无论怎样,您都必须以某种方式修复文件系统本身。
audit.txt
首先,从不包含此信息的文件中提取它当然是不可能的。因此,除非您在文件中看到audit.txt
想要用作文件名的内容,否则您的 ruby 脚本就是死胡同。你需要一个能从帽子里变出兔子的人。