Primeiro, 'ls *' está errado. O mesmo resultado pretendido pode ser alcançado usando apenas * , como em:
tftp -m binary 192.168.1.2 -c put * target/
As expansões de curingas são processadas pelo seu shell antes de executar o comando, portanto, a maneira correta de expandir * para uma lista de arquivos é simplesmente usar * , nunca 'ls' .
Em segundo lugar, o comando tftp put pode carregar vários arquivos, mas só aceita um único diretório de destino ao fazer isso. Você não precisa especificar vários destinos e ele não funcionaria de qualquer maneira - tftp não saberia onde os arquivos de origem terminam e os arquivos de destino começam. (Como dito anteriormente, os curingas são expandidos pelo seu shell, então tftp receberia put file1 file2 file3 , não put * .)
O misterioso : é causado por ls listando o conteúdo dos subdiretórios. Quando você executa ls * , o shell na verdade executa ls file1 file2 dir1 (suponha que você tenha dois arquivos e um diretório). Em seguida, ls imprime " file1 ", " file2 ", seguido de " dir1: (...all files in dir1...) ".