Jak mogę uzyskać polecenie scp, aby zastąpić folder docelowy

41

Korzystam z polecenia scp, aby skopiować niektóre pliki na zdalny komputer, podobnie jak w przypadku scp :)

Zauważam, że domyślnym zachowaniem kopii SCP dla plików jest zastąpienie istniejących plików. Teraz chcę skopiować folder, więc robię w zasadzie to samo:

scp -r <source_path> user@myOtherPc:<dest_path>

Gdzie części w <> to moje ścieżki folderów. Jednak gdy go uruchomię, pojawia się komunikat „plik istnieje”. Czy jest na to jakiś sposób? jakaś siła nadpisywania?

Dzięki, Fodder

pokarm_kodowy
źródło
2
Czy możesz podać kilka przykładów ścieżki? Nie wykonuję tego, aby odtworzyć to w moim systemie. Czy sprawdziłeś także uprawnienia do plików?
Levans,
Czy zawiera przydatne informacje, jeśli używasz trybu pełnego? -v. Ponadto, czy używasz ścieżki bezwzględnej czy względnej po stronie docelowej? Myślę, że jeśli folder docelowy już istnieje, utworzy ścieżkę źródłową w folderze docelowym, a nie nadpisuje ( testdir/testdir)
beroe 24.09.2013
2
To dziwne, że to rozumiesz. Podobno scp nie ma
noclobbera
1
@ Lewans Nie sprawdziłem uprawnień, właśnie rzuciłem okiem i myślę, że masz rację. Usunąłem wszystko w obszarze docelowym i zacząłem ponownie, używając tylko polecenia „scp” i użytkownika „root”, i mogłem wielokrotnie skopiować pliki / folder :) ... Nie jestem w 100% pewien, jaki problem z uprawnieniami I miałem, ale teraz mam „rączkę” w tej kwestii, prawdopodobnie mogę to zrozumieć, dzięki
code_fodder 24.09.2013
1
@beroe Tak, tak też myślałem ... pomyliło mnie, ale myślę, że popełniłem tutaj błąd użytkownika z uprawnieniami, nie jestem jeszcze ekspertem w Linuksie :( Ale spróbuję gadatliwości następnym razem mam taki problem, aby uzyskać więcej informacji, dziękuję. Zauważyłem również, że czasami pojawia się „folder wewnątrz folderu” ... ale to jest inny problem: o
code_fodder 24.09.2013

Odpowiedzi:

27

Jak powiedziano wcześniej, scp z radością zastępuje każdy plik, który jest już obecny.

Problem z „plikiem istnieje” może wystąpić tylko wtedy, gdy masz inny proces (np. Jednoczesny proces SCP lub coś innego) zapisujący foldery i pliki w tym samym miejscu docelowym. Zamiast tego rozważ użycie rsync.

nicolasochem
źródło
1
Dodałbym tylko: ... o ile masz dostęp do zapisu do tego pliku ...
SDsolar
ale w przypadku folderów czy scala folder, czy go zastępuje?
Dr_Hope
5

Podobnie jak Levans, nie byłem w stanie powielić tego, ale czy zastanawiałeś się nad użyciem rsync zamiast ssh? Jeśli kopiujesz dużą liczbę plików, rsync może być lepszą opcją niż scp. Istnieje wiele dobrych przewodników po Internecie, takich jak te:

http://troy.jdmz.net/rsync/index.html https://calomel.org/rsync_tips.html

Ten pierwszy link zajmuje się automatycznymi kopiami zapasowymi za pośrednictwem crona, więc niektóre instrukcje (takie jak tworzenie klucza ssh bez hasła) mogą nie być dla ciebie odpowiednie.

Ben
źródło
Interesujące, nie wiedziałem, że możesz używać rsync w ten sposób ... po prostu rzuciłem okiem na stronę podręcznika i wygląda na to, że możesz użyć jej w bardzo podobny sposób do scp z <ścieżka_źródła> i <użytkownik @ host: dest_path> parametry. Nie jestem w 100% pewien, że tego właśnie chcę, ponieważ chcę zawsze kopiować / nadpisywać bez dbania o status tego, co jest w dest, ale wciąż fajny pomysł :)
code_fodder 24.09.2013
Tak, może warto mieć odtwarzanie, ponieważ powinno zostać skopiowane do pliku, jeśli został zmieniony (lub część pliku, która została zmieniona, musiałbym dwukrotnie sprawdzić i jestem trochę zbyt zmęczony, prawda? teraz).
Ben
haha .... nie martw się o sprawdzenie, mogę to zrobić ... ale dzięki za informacje :)
code_fodder 24.09.2013
Ach, spoko, mogę przestać patrzeć na zapałki jako sposób na otwarcie powiek. ;)
Ben
1
To może działać, ale jest trochę jak użycie młota do uderzenia muchy. ;-)
SDsolar
3

Ten komunikat o błędzie zostanie wyświetlony, jeśli katalog docelowy zawiera już plik o tej samej nazwie co katalog źródłowy, który próbujesz przenieść. Nie możesz mieć pliku o tej samej nazwie co katalog w tym samym katalogu.

EvR2f
źródło