У меня есть много восстановленных файлов, многие из которых являются недействительными, хотя они выглядят нормально по имени и расширению. Это ожидается.

Теперь мне нужно отфильтровать те, которые, вероятно, в порядке. Я вижу варианты:

Например, файлы Power Point (* .pptx) на самом деле представляют собой zip-контейнеры, которые начинаются с PK в первых двух байтах. Итак, команда

head --byte 2 filename

выводит PK для большинства хороших файлов, тогда как плохие файлы не начинаются с PK.

Вопрос 1: Как я могу объединить head и find чтобы вывести список подходящих файлов?

Другой подход - команда file . Это печатает

Zip archive data, at least v2.0 to extract

для хороших файлов Power Point, но просто

data

для плохих файлов.

Вопрос 2: Как я могу объединить file с find чтобы вывести список допустимых файлов?

Есть и другие типы файлов, но я могу улучшить технику, если только получу подсказку :)

Вопрос 3: Есть ли более очевидные способы сделать это?

3 ответа3

1

С помощью find вы можете сделать что-то вроде

find . -type f -exec file "{}" + | awk  '/Zip archive data/ {print $1}' | sed 's/:$//'

который напечатает имя файла (удаляя завершающий :) файлов, которые файл идентифицирует как данные Zip archive .

0

Я обнаружил -printf параметр , чтобы find , что делает многие вещи намного проще , чем при использовании -exec Таким образом, эта команда определит (вероятно) хорошие файлы и переместит их в подкаталог с именем good:

find . -type f -printf "file '%p' | grep 'Zip archive data' && mv '%p' good \n" | sh

Для документов Word и Excel вы можете использовать строку «Автор:», поскольку действительные файлы документов, похоже, имеют этот атрибут.

0

Я бы порекомендовал использовать grep, так как он предназначен для поиска текста в файле.

Я не уверен в деталях, которые вам понадобятся, но вам стоит начать: http://www.computerhope.com/unix/ugrep.htm

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .