3

扫描磁盘后,我在“found.000”之类的文件夹中有很多 CHK 文件,...

我可以使用 file 命令找出扩展名:

for i in /media/Daten/found.*/*.chk ; do file $i; done

如何使用它来重建这些文件的所有文件扩展名?

4

2 回答 2

8

此技术不适用于所有文件。我曾经用它来帮助数据恢复。

for i in /media/Daten/found.*/*.chk; do mv "$i" "$i".$(grep $(file -bi $i | awk '{print $1}' | sed 's/;//') /etc/mime.types | head -1 | awk '{print $2}'); done

它的工作方式是在命令中使用 mime 类型功能,file然后为它 greps /etc/mime.types,选择列表中的第一个扩展名,然后将文件重命名为该扩展名。

这个命令会进行批量重命名,它会先移动然后再提问,所以要 100% 确定你在正确的目录上运行它。

下次不要使用 chkdsk 来恢复文件。您可能会损坏它们,无法修复。chkdsk 将 OM NOM NOM 您的数据,然后打嗝。在 chkdsk 之前,请始终使用恢复软件取回所需的文件。

通常,这些文件被命名为 .CHK,而不是 .chk(仅供参考。)

于 2012-06-05T03:35:56.807 回答
3

要恢复特定文件类型,请先查看其中的内容。在 OS X 上测试:

file --mime -b /media/Daten/FOUND.*/*.CHK | sort | uniq

application/octet-stream; charset=binary
application/ogg; charset=binary
application/pdf; charset=binary
application/zip; charset=binary
audio/x-wav; charset=binary
image/jpeg; charset=binary
image/png; charset=binary
video/3gpp; charset=binary

然后,对于您要保留的类型:

mkdir /tmp/renamed

for f in /media/Daten/FOUND.*/*.CHK
do file --mime $f \
  | perl -n -e \
  '/^([^.]*).*(3gpp|jpeg|ogg|png|wav)/ && print "$1.CHK /tmp/renamed/$1.$2\n"' \
  | xargs cp
done

这使用file --mime(或file -I,或file -i在 Linux 上)来确定 MIME 类型,然后将带有文件名和 MIME 类型的行传递给 Perl,Perl 使用正则表达式来捕获基本名称(like FILE0001)和文件类型(like jpeg)并打印一行,如FILE0001.CHK /tmp/renamed/FILE0001.jpeg. 最后,该行被传递给cp.

\在下一行继续单行命令。)

于 2012-07-21T22:19:11.200 回答