我恢复了许多文件,其中许多文件无效,尽管它们的名称和扩展名看起来没有问题。这是意料之中的事。
现在我需要过滤掉那些可能没问题的。我看到以下选项:
例如,PowerPoint 文件 (*.pptx) 实际上是前两个字节以 PK 开头的 zip 容器。因此命令
head --byte 2 filename
对于大多数好的文件,都会输出 PK,而坏的文件则不以 PK 开头。
问题1:如何结合head
列出find
匹配的文件?
另一种方法是file
命令。它打印
Zip archive data, at least v2.0 to extract
对于好的 PowerPoint 文件,但简单地
data
查找坏文件。
问题2:如何结合file
列出find
有效文件?
还有其他文件类型,但如果我得到线索,我就可以增强技术:)
问题 3:有没有更明显的方法可以做到这一点?
答案1
使用 find 你可以做类似的事情
find . -type f -exec file "{}" + | awk '/Zip archive data/ {print $1}' | sed 's/:$//'
它将打印文件标识为Zip archive
数据的文件的文件名(删除尾部的:)。
答案2
我建议使用 grep,因为它用于在文件中搜索文本。
我不确定你需要哪些细节,但这应该可以帮助你入门:http://www.computerhope.com/unix/ugrep.htm
答案3
我发现-printf
使用 参数find
可以让很多事情变得比使用 简单得多-exec
。因此,此命令将识别(可能)好的文件并将它们移动到名为 good 的子目录中:
find . -type f -printf "file '%p' | grep 'Zip archive data' && mv '%p' good \n" | sh
对于 Word 和 Excel 文档,您可以使用字符串“Author:”,因为有效的 doc 文件似乎具有此属性。