Usar um loop for
sobre find
output é um antipadrão na melhor das hipóteses. Veja BashFAQ / 001 - Como posso ler um arquivo (fluxo de dados, variável) linha-a-linha (e / ou campo-por- campo)? pelo motivo. Use um loop while
como abaixo com um comando read
. O comando abaixo delimita a saída de find
com um byte NULL e o comando read
lê ao dividir esse byte, para que todos os arquivos com caracteres especiais em seus nomes sejam manipulados com segurança (incluindo novas linhas)
#!/usr/bin/env bash
site="hello"
wDir="/home/websites/${site}/httpdocs/"
find "${wDir}" -name "*.css" -type f -print0 | while IFS= read -r -d '' file; do
printf '%s\n' "$file"
done
Ou evite usar as linhas de tubulação e faça a substituição do processo
while IFS= read -r -d '' file; do
printf '%s\n' "$file"
done< <(find "${wDir}" -name "*.css" -type f -print0)
A web ShellCheck não relata problemas para nenhum dos dois snippets acima.