Expansão da linha de comando do Linux, valores de reutilização

0

Eu estou tentando tftp um monte de arquivos

tftp -m binary 192.168.1.2 -c put file1 target/file1

Estou tentando usar a expansão de linha cmd, como

tftp -m binary 192.168.1.2 -c put 'ls *' target/'ls *'

mas isso não parece funcionar, um ":" é inserido após o destino.

Existe uma maneira rápida de expandir esse tipo de coisa?

Eu quero reutilizar os valores que obtive na primeira expansão para a próxima expansão

    
por user1190 01.02.2012 / 22:41

1 resposta

4

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...) ".

    
por 01.02.2012 / 22:55