Mam 1,6 miliona plików na serwerze A, a tylko około 20 tysięcy z nich musi dotrzeć do serwera B. Miejsce docelowe, serwer B, znajduje się na wspólnym serwerze GoDaddy, więc jestem ograniczony do scp do przesyłania wielu plików jednocześnie.
Chciałbym wygenerować plik .txt z tych plików 20k + z zapytania SQL, a następnie przekazać tę listę do scp. Czy są jakieś opcje, aby to zrobić?
cat /proc/version
daje mi Linux version 2.6.32-531.23.3.lve1.2.65.el6.x86_64 ([email protected]) (gcc version 4.4.7 20120313 (Red Hat 4.4.7-4) (GCC) ) #1 SMP Tue Aug 19 10:37:27 EDT 2014
rsync
to była też moja pierwsza myśl, ale GoDaddy ma mnóstwo blokad na instalowaniu nowego oprogramowania dzięki ich SSH. Tak, ścieżki plików są obecnie w bazie danych SQL, ale mogę je łatwo wyodrębnić do pliku tekstowego.Odpowiedzi:
jeśli masz już plik tekstowy, wykonaj następujące czynności
spowoduje to przejście do wiersza po pliku wyjściowym pliku.txt i uruchomienie komendy scp na linię; Mam nadzieję, że to pomoże.
źródło
xargs
nascp
połączenie było używanexargs
nacp
na zdalnym serwerze, aby odizolować pliki do katalogu, trochę jak:cat files.txt | xargs -l bash -c 'cp $0 $1'
, a następnie użyłem singlascp
polecenie do pobrania tego katalogu. Dziękuję Ci!Dostarczona odpowiedź działa świetnie. użyłem
xargs -a
wysłać plik do standardowego wyjścia. Następnie połączyłem to z oryginalną odpowiedziącat /location/file.txt | xargs -i scp {} user@server:/location
Moja odpowiedź:
źródło
xargs -a
ponad używaniecat
?cat
jest bardziej przenośny, ponieważ dostępność-a
dlaxargs
jest zależny od systemu.Powyższe odpowiedzi wymagają uwierzytelnienia dla każdego przesłanego pliku. SCP działa na szczycie SSH, a GoDaddy zapewnia dostęp do innych poleceń nad SSH, takich jak tar. Dlatego najlepszą metodą jest użycie taru z ssh przez:
Jeśli lista plików znajduje się na STDIN, możesz wykonać następujące czynności: Uwaga: cat jest tutaj używany tylko do generowania STDIN
Aby skrócić czas transferu kosztem dodatkowego czasu przetwarzania, możesz dodać -z lub -j do obu poleceń tar, aby odpowiednio włączyć kompresję gzip lub bzip.
źródło
Chciałem zrobić to samo dla listy folderów i żadnej z odpowiedzi używając
xargs
pracował dla mnie. W końcu rozwiązałem to po prostu:Gdzie przekazuję listę plików do rozszerzenia powłoki. Myślę, że może to być pomocne dla każdego, kto szuka alternatywnego rozwiązania.
źródło