/ / przekazać tablicę jako argument komendy mget - bash, lftp

przekazuje tablicę jako argument do polecenia mget - bash, lftp

Zapisałem wszystkie nazwy plików, które chcę pobrać z serwera SFTP w pliku. Ten plik jest przechowywany na moim komputerze lokalnym.

Próbuję przekazać zawartość pliku do tablicy.

Czy jest możliwe przekazanie tej tablicy jako argumentu mget?

coś jak mget $my_array gdzie my_array ma listę nazw plików.

Odpowiedzi:

1 dla odpowiedzi № 1

Przede wszystkim pamiętaj o tym mget to jest lftp command, więc musi być używany z -c wyłączać lftp.

Teraz, biorąc pod uwagę, że tablica zawiera pełne ścieżki do plików, które możesz zrobić

lftp -c mget "${array[@]}"

jako użytkownik anonimowy, aby uzyskać te pliki.

Przykład

array=( "ftp://ftp.redhat.com/redhat/brms/5.3.1/SHA256SUM" "ftp://ftp.redhat.com/redhat/brms/5.3.1/brms-p-5.3.1.GA-src.zip" )
lftp -c mget "${array[@]}"

przyniosłoby ci dwa pliki.


Po co podwójnie cytować ${array[@]}?

Gdy rozszerzenie występuje w cudzysłowach, każdy parametr rozszerza się do oddzielnego słowa, dzięki czemu można rozwiązać podział słów dla nazw plików ze spacjami w nich (choć rzadko).


Edytuj (pamiętaj, że nie jest to lftp sesja a bash sesja na localhost)

Załóżmy, że masz nazwy plików w tablicy bash, jak poniżej

array=( "SHA256SUM" "brms-p-5.3.1.GA-src.zip" )

Po pierwsze:

array=( "${array[@]/#/ftp://ftp.redhat.com/redhat/brms/5.3.1/}" )
# We have just added the ftp server name + path before every file name in array
lftp -c mget "${array[@]}" # Download the files just like that