Вы не можете просто экранировать аргументы для передачи их find
.
. Любое расширение оболочки произойдет до запуска find
.find
не будет передавать свои аргументы через оболочку, поэтому, даже если вы выйдете из расширения оболочки, все будет просто рассматриваться как буквальные аргументы команды test
, а не расширяться оболочкой, как вы ожидаете.
Лучший способ достичь желаемого - написать короткий сценарий оболочки, который принимает имя файла в качестве аргумента, и использовать -exec
для этого:
find . -type f -exec is_html.sh {} \; -print
с is_html.sh
:
#!/bin/sh
test $(file --brief --mime-type "$1") == 'text/html'
Если вы действительно хотите, чтобы все это было в одной строке, без использования отдельного сценария, вы можете вызвать sh
непосредственно из find
:
find . -type f -exec sh -c 'test $(file --brief --mime-type "$0") == "text/html"' {} \; -print