Expansión de la línea de comandos de Linux, reutilización de valores

Expansión de la línea de comandos de Linux, reutilización de valores

Estoy intentando enviar por tftp un montón de archivos.

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

He estado intentando usar la expansión de línea cmd como

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

pero esto no parece funcionar, se inserta un ":" después del objetivo.

¿Existe una manera rápida de expandir este tipo de cosas?

Quiero reutilizar los valores que obtuve en la primera expansión en la siguiente expansión.

Respuesta1

En primer lugar, `ls *`esequivocado.Se puede lograr el mismo resultado deseado usando just *, como en:

tftp -m binary 192.168.1.2 -c put * target/

Las expansiones comodín son procesadas portu caparazónantes de ejecutar el comando, por lo que la forma correcta de expandirlo *a una lista de archivos essimplemente usa*, nunca `ls`.


En segundo lugar, elftp putEl comando puede cargar varios archivos, pero solo aceptaun único directorio de destinoal hacerlo. No es necesario especificar varios destinos y, de todos modos, no funcionaría: tftpno sabría dónde terminan los archivos de origen y dónde comienzan los archivos de destino. (Como se dijo anteriormente, su shell expande los comodines, por lo que tftprecibiría put file1 file2 file3,no put *.)


El misterio :se debe a lsla enumeración del contenido de los subdirectorios. Cuando ejecuta ls *, el shell realmente se ejecuta ls file1 file2 dir1(supongamos que tiene dos archivos y un directorio). Luego lsimprime " file1", " file2", seguido de " dir1: (...all files in dir1...)".

información relacionada