Considere um diretório com nomes de arquivos típicos do Microsoft Windows:
New Document.txt
Foo.doc
Foo - Copy.doc
Gostaria de fazer algo em cada arquivo, como:
for sendfile in $(find ${POLLDIR} -type f -mmin +1 -print0)
do
echo \"${sendfile}\"
ls -l "${sendfile}"
and-so-on
if success_above
then
mv "${sendfile}" "${donedir}/."
fi
done
Por favor, note que eu não quero apenas executar um comando com "$ {sendfile}" como argumento. Eu preciso do loop para fazer a verificação de erros e outras coisas (como mover "$ {sendfile}" no sucesso e registrar falha).
O que é um constructo "correto" para escapar / citar os nomes dos arquivos de find para que eu possa usá-los de forma parecida com o comando ls
acima? Se possível, gostaria de evitar armazenar os nomes de arquivos em um arquivo temporário, um por um.
Eu não acho que find -printf '"%p"\n'
como sugerido por triplee nos comentários para questionar [ Como eu uso quando o nome do arquivo contém espaços? ] funcionaria em uma construção for foo in $(...) do
.
Acho que substituir os caracteres "ilegais" por ?
funcionaria para mim neste caso, mas seria muito feio. O loop for, por fim, processa arquivos em $ {POLLDIR} e, em seguida, os move quando concluído, portanto, a chance de "Foo bar.txt" colidir com "Foo-bar.txt" é 0 (-ish).
Minha melhor tentativa até agora é:
for sendfile in $(find ${POLLDIR} -type f -mmin +1 -print | tr ' ' '?')
do
...
done
Alguma sugestão de limpeza?