Chciałbym skopiować pliki z / na zdalny serwer w różnych katalogach. Na przykład chcę uruchomić te 4 polecenia jednocześnie.
scp remote:A/1.txt local:A/1.txt
scp remote:A/2.txt local:A/2.txt
scp remote:B/1.txt local:B/1.txt
scp remote:C/1.txt local:C/1.txt
Jak najłatwiej to zrobić?
rsync
, być może może ci pomóc w tej sprawie i wielu nadchodzących sprawach. Następnie, aby uniknąć wprowadzania hasła (nie mówiąc już wielokrotnie) należy przeczytaćssh
kluczy publicznych / prywatnych, np digitalocean.com/community/tutorials/how-to-set-up-ssh-keys--2scp [email protected]:'/etc/openvpn/ca.crt /etc/openvpn/client/client0.crt /etc/openvpn/client/client0.key /etc/openvpn/client/ta.key' ./
.Odpowiedzi:
Skopiuj wiele plików ze zdalnego do lokalnego:
Skopiuj wiele plików z lokalnego na zdalny:
Skopiuj wiele plików ze zdalnego do zdalnego:
Źródło: http://www.hypexr.org/linux_scp_help.php
źródło
~
lub./
tylko.\{a,b,c\}
spowoduje przeniesienie plików w jednym połączeniu / partii (ponieważ zostaną one rozwinięte na zdalnym hoście), podczas gdy użycie{a,b,c}
spowoduje otwarcie wielu połączeń, a narzut jest dość zauważalne przy przesyłaniu wielu plikówZ lokalnego na serwer:
scp file1.txt file2.sh [email protected]:~/pathtoupload
Z serwera na lokalny:
scp -T [email protected]:"file1.txt file2.txt" "~/yourpathtocopy"
źródło
-T
opcję, aby ukryć ten błąd.Możesz kopiować całe katalogi za pomocą
-r
przełącznika, więc jeśli możesz wyizolować swoje pliki do własnego katalogu, możesz skopiować wszystko naraz.więc na przykład
Lub jeśli jest ich tylko kilka, możesz użyć:
źródło
Jak wspomniał Jiri, możesz użyć
scp -r user@host:/some/remote/path /some/local/path
do kopiowania plików rekurencyjnie. Zakłada się, że istnieje jeden katalog zawierający wszystkie pliki, które chcesz przenieść (i nic więcej).Jednak SFTP stanowi alternatywę, jeśli chcesz przesyłać pliki z wielu różnych katalogów, a miejsca docelowe nie są identyczne:
Używa składni „tutaj doc” do definiowania sekwencji poleceń wejściowych SFTP. Alternatywnie, możesz umieścić polecenia SFTP w pliku tekstowym i wykonać
sftp user@host -b batchFile.txt
źródło
scp
Zbyt długo analizowałem instrukcję, próbując znaleźć tę funkcję, i chyba scp jej nie ma./home/vagrant/Code/
zamiast~/Code/
.- r
do katalogówOdpowiedzi z
{file1,file2,file3}
działa tylko z bash (zdalnie lub lokalnie)Prawdziwy sposób to:
źródło
{…, …, …}
działaniem w wielu powłokach, nie tylko w Bash. Jednak działa to w dowolnej powłoce, więc jest wyraźnie lepsze.Po dłuższej zabawie ze scp znalazłem najsolidniejsze rozwiązanie:
(Uwaga na pojedyncze i podwójne znaki cudzysłowu)
Lokalny do zdalnego:
Zdalne do lokalnego:
Zauważ, że cokolwiek po „HOST:” zostanie wysłane do pilota i tam parsowane. Musimy więc upewnić się, że nie są one przetwarzane przez lokalną powłokę. Właśnie dlatego pojawiają się pojedyncze cudzysłowy. Podwójne cudzysłowy są używane do obsługi spacji w nazwach plików.
Jeśli wszystkie pliki znajdują się w tym samym katalogu, możemy użyć *, aby dopasować je wszystkie, np
W porównaniu do użycia składni „{}”, która jest obsługiwana tylko przez niektóre powłoki, ta jest uniwersalna
źródło
{}
Składnia ułatwia kopiowanie wielu plików w tym samym katalogu, czy jest jakiś sposób aby to zrobić zscp -r
tak że"FILE1" "FILE2"
mogą być ścieżki względne i bezwzględne ścieżki nie do plików?Najprostszy sposób to
Tak więc lista {..} może zawierać katalogi (A, B i C tutaj są katalogami; „1.txt” i „2.txt” to nazwy plików w tych katalogach).
Chociaż skopiuje wszystkie cztery pliki do jednego katalogu lokalnego - nie jestem pewien, czy tego właśnie chciałeś.
W powyższym przypadku skończysz na plikach zdalnych A / 1.txt, A / 2.txt, B / 3.txt i C / 4.txt skopiowanych do jednego lokalnego katalogu o nazwach plików ./1.txt, ./2.txt, ./3.txt i ./4.txt
źródło
sh
. Na POSIX .local$ scp -r remote:{A/1.txt,A/2.txt,B/3.txt,C/4.txt,D,F} ./
Problem : Kopiowanie wielu katalogów ze zdalnego serwera na komputer lokalny za pomocą pojedynczego polecenia SCP i zachowanie każdego katalogu tak, jak jest na zdalnym serwerze.
Rozwiązanie : SCP może to zrobić z łatwością. Rozwiązuje to irytujący problem wielokrotnego wprowadzania hasła podczas korzystania z SCP z wieloma folderami. W rezultacie oszczędza to również dużo czasu!
na przykład
PS: Motywowany tą świetną odpowiedzią: scp lub sftp kopiują wiele plików za pomocą jednego polecenia
W oparciu o komentarze działa to również dobrze w Git Bash w systemie Windows
źródło
Skopiuj wiele katalogów:
źródło
Możesz to zrobić w następujący sposób:
Spowoduje to pobranie wszystkich wymienionych nazw plików do dowolnego lokalnego katalogu.
Pamiętaj, aby nie wstawiać spacji między każdą nazwą pliku, tylko przecinek
,
.źródło
/path/to/files/\\{file1.ext,file2.ext,file3.ext\\}
jakby pliki miały różne rozszerzenia. Uwaga dla osób PowerShell (teraz, gdy MS dołączyło do drużyny), musisz użyć`
zamiast tego ucieczki:/path/to/files/`{file1.ext,file2.ext,file3.ext`}
UWAGA: Z góry przepraszam za odpowiedź tylko na część powyższego pytania. Uważam jednak, że te polecenia są przydatne w moich bieżących potrzebach dotyczących Uniksa.
Przesyłanie określonych plików z komputera lokalnego na komputer zdalny:
~/Desktop/dump_files$ scp file1.txt file2.txt lab1.cpp etc.ext [email protected]:Folder1/DestinationFolderForFiles/
Przesyłanie całego katalogu z komputera lokalnego na komputer zdalny:
~$ scp -r Desktop/dump_files [email protected]:Folder1/DestinationFolderForFiles/
Pobieranie całego katalogu ze zdalnego komputera na komputer lokalny:
~/Desktop$ scp -r [email protected]:Public/web/ Desktop/
źródło
W moim przypadku jestem ograniczony tylko do używania polecenia sftp.
Musiałem więc użyć pliku wsadowego z sftp. Utworzyłem skrypt taki jak poniżej. Zakłada się, że pracujesz w katalogu / tmp i chcesz umieścić pliki w systemie destdir_on_remote_system w systemie zdalnym. Działa to również tylko przy nieinteraktywnym logowaniu. Musisz skonfigurować klucze publiczne / prywatne, abyś mógł się zalogować bez podawania hasła. Zmień w razie potrzeby.
źródło
twoje polecenie działa idealnie, ale chcę również zmienić nazwę pliku podczas wysyłania lokalnego do zdalnego. Napisałem polecenie: - sshpass -p hasło scp /path/to/file.txt root @ nazwa_hosta: /path/newfile.txt
Daje jednak błąd, że /path/newfile.txt: Nie znaleziono takiego pliku lub katalogu plz pomaga mi w tej sytuacji
źródło
hostname:/path/
faktycznie istnieje i jest dostępny.scp używa ssh do przesyłania danych z tym samym uwierzytelnieniem i zapewnia takie samo bezpieczeństwo jak ssh.
Najlepszą praktyką jest wdrożenie „KLUCZY SSH I AUTORYZACJI KLUCZA PUBLICZNEGO”. Dzięki temu możesz pisać swoje skrypty, nie martwiąc się o uwierzytelnianie. Proste.
Zobacz CO TO JEST SSH-KEYGEN
źródło
W konkretnym przypadku, w którym wszystkie pliki mają to samo rozszerzenie, ale z innym sufiksem (powiedzmy numer pliku dziennika), stosujesz:
Spowoduje to skopiowanie wszystkich plików o nazwie plik_logu z podanego folderu w zdalnym folderze, tj. Plik_logu.1, plik_logu.2, plik_logu.3.
źródło
źródło
-r
opcjąscp
. I możesz zachować inne atrybuty (np. Znacznik czasu) z-p
opcją.