Я хотел узнать количество файлов изображений в каталоге. В итоге я использовал это:
find . -type f -exec file {} \; | grep -c -i 'image'
Это кажется неэффективным способом сделать это. Я мог придумать другой способ сделать это - использовать оператор OR, но я не мог понять из справочной страницы, как это можно сделать.
Есть идеи, как это можно сделать более эффективно? Я не хочу выполнять приведенные выше команды в каталоге с довольно большим количеством файлов, и это длилось вечно.
Если вы хотите искать изображения по расширению, вы можете использовать следующую команду:
find -type f -name *.gif -o -name *.jpg -o -name *.bmp
Конечно, вам нужно перечислить все интересующие вас расширения.
Чтобы получить счет, вы можете добавить | wc -l
.
Вы можете повысить эффективность, используя \+
вместо того \;
. Разница здесь в том, что \+
передает все найденные файлы на однократное выполнение file
где \;
выполняет file
один раз для каждого найденного файла.
find . -type f -exec file {} \+ | grep -c -i 'image'
Вы столкнетесь с проблемами, если найдете больше файлов, чем file
можно принимать в качестве аргументов. Вы можете пропустить это через xargs
с --max-args
вариант, если это так.
если вы хотите найти файлы по mime-типу файла в данном случае «изображение», вам понадобится следующая команда
find . -type f -print0 | xargs -0 file -i | grep -i image | wc -l