Вам нужна оболочка, чтобы интерпретировать эти конструкции if / then / else
или запускать эти конвейеры (хотя на самом деле они вам не нужны здесь):
find . -type f -exec sh -c '
for file do
case $(file -b "$file") in
(data) printf "%s is CORRUPT\n" "$file";;
(*) printf "%s is DATA\n" "$file";;
esac
done' sh {} +
(как и в вашем вопросе, он печатает "CORRUPT", когда файл
говорит data
. Я не уверен, что вы это имели в виду).
Что бы вы ни делали, не включайте {}
в код оболочки, как предлагали другие! Это было бы очень опасно (и, кстати, непереносимо), поскольку, например, файл с именем $ (rm -rf "$ HOME")
заставит вас удалить весь домашний каталог.