Я хочу узнать, как искать файлы определенного типа: я вошел на SSH-сервер и пытаюсь найти файл .jpg
, но владелец сервера (мой учитель) удалил все расширения.
Я попробовал grep -lr "JFIF"
и нашел много каталогов с одинаковым именем файла, поэтому я перешел в случайный каталог, который был найден с помощью команды grep
, и попытался применить cat
команду к нему, но терминал не смог отобразить весь двоичный файл.
Также strings
команда заблокирована на сервере ssh, мой учитель сказал, что нужно найти файл jpg и что этот файл содержит серийный номер (SN), но я понятия не имею, где его найти.
Если вам нужны SSH-кардиналы, я с радостью вам их выдам. В любом случае, мой учитель сказал, что file
для этого можно использовать команду, но я не знаю, как это сделать.
Кстати: он сказал (СН)
решение1
Я постараюсь дать вам несколько подсказок, чтобы вы смогли решить свою домашнюю задачу самостоятельно.
Выполните следующие действия:
- прочитайте руководство,
file
выполнивman file
. - Затем попробуйте
file somefile
и посмотрите, что получится. - Попробуйте запустить
file
на разных типах файлов - К настоящему моменту вы должны понимать, как определить, является ли файл изображением JPEG или нет.
- Теперь прочитайте руководство
find
(или воспользуйтесь Google, чтобы узнать, как использовать его для поиска всех файлов в определенном каталоге и всех подкаталогах) - теперь узнайте, как использовать
-exec
опциюfind
для того, чтобы связать ее с ранее использованнойfile
командой - Теперь вы сможете узнать типы файлов всех файлов в нужном каталоге и вывести их список.
- Теперь прочтите о каналах
|
иgrep
командах, чтобы узнать, как фильтровать только файлы JPEG.
решение2
Прежде всего я хочу поблагодарить @incBrain и @Serg за то, что они не ответили на мой вопрос напрямую, что помогло мне понять много нового :).
Моя задача состояла в том, чтобы найти определенный .jpg
файл, у которого удалено расширение. Первое, что пришло мне в голову, это.jpg
магический байтчто было JFIF
, и с помощью инструкций @incBrain я смог построить эту команду
find / -exec file {} \; | grep "JFIF"
эта строка связывает find
команду с file
командой, используя -exec
затем получает вывод обеих команд find
& file
и передает его в качестве ввода через символ конвейера |
для grep
команды, которая показывает только файлы, содержащие JFIF
в своем двоичном файле .jpg files
.
Моя проблема на самом деле заключалась в поиске конкретного серийного номера. Сначала я думал, что серийный номер включен в двоичный файл файла, но это было не так, затем мне в голову пришла безумная мысль.
Ой! Почему я не вижу, как выглядит фотография? Я имею в виду, если я не могу найти серийный номер, было бы неплохо получить фотографию.
Я искал в Интернете хороший способ передачи файлов из SSH на мою машину и нашел этот блок кода, который сработал!
scp [email protected]:/home/example/file.txt /Local_Directory
Надеюсь, этот ответ поможет кому-нибудь в будущем :).
решение3
Одним из возможных решений может быть следующее: использование find
, которое рекурсивно перечисляет обычные файлы ( -type f
), и выполняет file
команду для каждого из них. Перенаправить вывод в , чтобы grep
отфильтровать типы файлов.
Однако здесь мне хотелось бы сделать что-то более забавное; более неловкое, но более забавное.
$ find . -maxdepth 1 -type f -printf "%f\t" -exec hexdump -n8 {} \; | awk '/d8ff e0ff 1000 464a/{print $1}'
Как вы можете знать или не знать, каждый файл имеет первые 8 байт любого файла, обозначающих тип файла. Таким образом, используя find
мы ищем все обычные файлы, печатаем их имя, но затем выполняем hexdump для извлечения первых 8 байт и отфильтровываем awk
только те имена файлов, которые имеют эти первые 8 байт.
Вот небольшое доказательство:
$ hexdump -n 10 1450763029649.jpg
0000000 d8ff e0ff 1000 464a 4649
000000a
$ hexdump -C -n 10 1450763029649.jpg
00000000 ff d8 ff e0 00 10 4a 46 49 46 |......JFIF|
0000000a
решение4
file * | grep -i "jpeg"
Это выполнит поиск по каждому файлу в каталоге и вернет его тип файла. |
Затем через Pipe эти результаты просматриваются grep, чтобы найти файл с типом файла "jpeg" или, по сути, файл .jpg.