Это не точный ответ на ваш заголовок (вложение if внутри find), но для всех целей это лучшее решение, чем вставка целого сценария оболочки внутри find.
Также обратите внимание, что внутри общего sh
тесты [[
не работают, а [
не соответствуют шаблону в правой части =
. Или используйте regex ==~, как я полагаю, вам нужно. Таким образом, вам понадобится оболочка bash, что не имеет особого смысла, если вы уже находитесь внутри оболочки bash. В любом случае, это быстрее, чем запускать новую оболочку:
#!/bin/bash
while IFS= read -rd '' file; do
if [[ $(file "$file" | cut -f2 -d':') =~ " data" ]]; then
printf "%s is CORRUPT\n" "$file"
else
printf "%s is DATA\n" "$file"
fi
done < <(find . -type f -print0)
Оговорка: я изменил ваш == на =~, предполагая, что вы хотите найти ' data'
текст в PNG-изображении (или что-то подобное):
$ file TrueTable-1.png| cut -f2 -d':'
PNG image data, 405 x 292, 8-bit colormap, non-interlaced
Пожалуйста, сделайте комментарий, если это предположение неверно.