Обычно я могу обеспечить копирование файлов с одного компьютера на другой с помощью
> scp [email protected] ssh [email protected]:/home/user/my_files/* .
что очень медленно для больших наборов данных.
Мне сказали, что машины, которые я использую, имеют очень быструю ссылку, к которой можно получить доступ с помощью wget. Как мне выполнить ту же передачу файлов, используя wget?
решение1
Если у вас есть быстрое, безопасное и стабильное сетевое соединение между этими двумя машинами, вы можете использовать комбинацию netcat
и tar
, например, так.
На целевом компьютере выполните:
nc -l 10000 | tar -C /destination/directory -xzf -
На исходной машине выполните:
tar -cz /source/directory | nc dst-machine-ip-address 10000
Имейте в виду, что шифрование не используется, поэтому трафик можно перехватывать, и если по какой-либо причине соединение будет прервано, вам придется начинать все заново.
Лично я бы следил за этим rsync
.
решение2
Производительностьscpможет быть вызвано двумя факторами:
- Стоимость шифрования, которая может оказаться слишком высокой для медленных процессоров,
- Количество обращений туда и обратно, необходимое для запроса одного файла.
Для большого количества мелких файлов это второй. Моей первой идеей было посоветовать использоватьsftp, так как он использует другую программу на удаленном хосте. Но после теста это дает схожую производительность.
Решение, которое работает, заключается в использовании программы, которая устанавливается как на клиенте, так и на сервере и отправляет обратно только один поток данных (вместо тысячсшканалы):
Если у вас естьrsyncна удаленном сервере (и вы устанавливаете его на клиенте) используйте:
rsync -av -e "ssh [email protected]" [email protected]:/home/user/my_files .
В противном случае вы можете использоватьсмола:
ssh -o [email protected] -e none [email protected] \ tar -c /home/user/my_files | tar -x