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