Espansione della riga di comando di Linux, riutilizzo dei valori


0

Sto cercando di raggruppare un mucchio di file

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

Ho cercato di usare l'espansione della linea cmd come

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

ma questo non sembra funzionare, un ":" viene inserito dopo il target.

C'è un modo rapido per espandere questo tipo di cose?

Voglio riutilizzare i valori ottenuti nella prima espansione nella successiva espansione

Risposte:


4

Prima di tutto, `ls *`è sbagliato. Lo stesso risultato previsto può essere ottenuto usando just *, come in:

tftp -m binary 192.168.1.2 -c put * target/

Le espansioni di caratteri jolly vengono elaborate dalla shell prima di eseguire il comando, quindi il modo corretto di espandersi *in un elenco di file è semplicemente* quello di non utilizzarlo mai `ls`.


In secondo luogo, il comando tftp put può caricare più file, ma accetta una sola directory di destinazione quando lo fa. Non è necessario specificare più target e non funzionerebbe comunque - tftpnon saprebbero dove finiscono i file di origine e iniziano i file di destinazione. (Come detto in precedenza, i caratteri jolly sono espansi dalla shell, così tftpavrebbero ricevuto put file1 file2 file3, non è put * .)


Il misterioso :è causato lsdall'elenco dei contenuti delle sottodirectory. Quando si esegue ls *, la shell viene effettivamente eseguita ls file1 file2 dir1(supponiamo di avere due file e una directory). Quindi lsstampa " file1", " file2", seguito da " dir1: (...all files in dir1...)".

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.