2017-02-06 7 views
0

Скопируйте все файлы с удаленного устройства, только если имя файла состоит из любого имени в файле file.txt.Копирование файлов на основе условия имени файла

file.txt содержит имена, как

rahul 
jon 
babra 

В настоящее время я делаю это:

while read p; do  
scp -i somefile.pem [email protected]:myfolder/\*$p\* . 
done<file.txt 

Но это открытие будет подключение к удаленным для каждого имени в моем file.txt.

Я ищу оптимизацию для обслуживания всех файлов в одном соединении?

+2

Проверьте rsync - он может передавать файлы по ssh, а аргументы -include-from/-files-from делают то, что звучит так, как вы хотите – moonshadow

ответ

3

Откройте главное соединение, которое каждый последующий scp может повторно использовать. См. Различные опции Control* в man ssh_config за советом по использованию более безопасного пути управления.

# Don't run a command (-N), but open a reusable connection (-M and -S) 
# then go to the background (-f) 
ssh -fNM [email protected] -S "%C" 

while read p; do 
    # Reuse the open connection (-S) 
    scp -i somefile.pem -S "%C" [email protected]:myfolder/\*$p\* . 
done < file.txt 

# Close the background connection 
ssh -S "%C" -O exit