find . -name '*.html' -print0 | while IFS= read -r -d ''; do
Não há nada nessa linha que tenha algum tipo de problema com nomes de arquivos contendo combinações de espaços e / ou canais em seus nomes:
bash-4.4$ touch 'A|B' '1|2' 'quux|foo bar'
bash-4.4$ ls
1|2 A|B quux|foo bar
bash-4.4$ find . -print0 | while IFS= read -r -d ''; do printf '"%s"\n' "$REPLY"; done
"."
"./A|B"
"./1|2"
"./quux|foo bar"
Observe também que, dependendo do que você gostaria de fazer com os nomes encontrados, é quase sempre melhor fazer isso com um -exec
de dentro de find
:
find . -type f -name "A*" -exec cat {} \;
Resposta relacionada a outra pergunta: Por que meu script de shell sufoca em espaço em branco ou outros caracteres especiais? (consulte especialmente "Como processar arquivos encontrados por find?" nessa resposta).