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 № 1Przede 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