Sim, você pode transmitir tudo para o shell em um loop:
for i in *; do
printf "echo 'Copying $i...'\nsleep 1\ncp '$i' 'dir/'\n\n" | zsh
done
Isso produzirá a seguinte saída (criei um diretório temporário com arquivos chamados 1 - 10 e um diretório dir :
Copying 1...
Copying 10...
^CCopying 2...
^CCopying 3...
^CCopying 4...
^CCopying 5...
^CCopying 6...
^CCopying 7...
^CCopying 8...
^CCopying 9...
Antes de transmitir para zsh
, verifique se os comandos fazem o que você deseja.