Você tem esse erro:
dirname: missing operand.
Try dirname --help' for more information
porque dirname está em falta (nada foi passado como argumento). Isso aconteceu porque grep retornou resultados vazios.
Se você estiver usando o GNU xargs , você pode usar -r ( --no-run-if-empty ) para não executar o comando, quando a entrada estiver vazia (não contém nenhum não-blanks).
Para fazê-lo funcionar com o BSD xargs , você provavelmente precisará reescrever seu comando para verificar se a entrada está vazia e executar o comando de acordo. Ou simplesmente ignore o erro suprimindo stderr, por exemplo:
find . ... -exec sh -c "grep ... | xargs dirname 2> /dev/null || true" ';'
Ou você pode usar o loop while para evitar a análise de arquivos vazios ou problemas com espaços em nomes de arquivos, por exemplo,
find . -type f -name ".htaccess" -print0 | while IFS= read -r -d '' file; do
grep -Eli '^deny from all$' "$file" | while IFS= read -r -d '' deny_file; do
dirname "$deny_file"
done
done