У меня нет единства, иначе я бы знал, какой режим размещения вам нужен.
Я попробую дать вам несколько советов, чтобы вы могли самостоятельно решить свой HW.
Выполните следующие шаги:
прочитайте руководство по file, выполнив man file , Затем попробуйте file somefile и посмотрите, что произойдет. Попробуйте запустить file для разных типов файлов. Теперь вы должны понимать, как определить, является ли какой-либо файл jpeg-изображением или нет. теперь прочитайте руководство для find (или используйте google, чтобы узнать, как использовать его для поиска всех файлов в какой-либо директории и во всех подкаталогах), теперь узнайте, как использовать опцию -exec для find, чтобы соединить ее с ранее использовавшаяся команда file Теперь вы можете узнать типы файлов всех файлов в нужном каталоге и перечислить их. Теперь прочитайте о командах pipe | и grep, чтобы узнать, как фильтровать только файлы JPEG.Одним из возможных решений может быть следующее: use 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
file * | grep -i "jpeg"
Это будет поиск по каждому файлу в каталоге и возврат его типа файла. Через Pipe | эти результаты затем проверяются grep, чтобы найти файл с типом файла «jpeg» или в основном файл .jpg.