Czy istnieją inne polecenia, takie jak scp, ale do usuwania plików i folderów?

14

Używam scp do kopiowania rzeczy do zdalnej lokalizacji. Ale czasami scp nie działa zgodnie z oczekiwaniami, okazało się, że czasami kopia nie kończy się poprawnie (być może po dodaniu nowych plików do folderu, który kopiuję).

Chcę najpierw usunąć folder zdalny, a następnie wykonać kopię, aby upewnić się, że mam dokładnie to, czego potrzebuję.

Czy istnieją inne polecenia, takie jak scp (np. Srm lub smv)? Czy istnieje sposób na usunięcie zdalnych folderów i plików?

pokarm_kodowy
źródło

Odpowiedzi:

19

sshKomenda pozwoli Ci wykonać prawie każde polecenie na zdalnym komputerze, na przykład,

ssh yourlogin@remotehost rmdir somedir

gdzie w tym przykładzie somedirjest względny do katalogu domowego twojego loginu.

garyjohn
źródło
Dziękuję za to. Jedyny problem, jaki mam z tą metodą, to to, że za każdym razem, gdy ją wywołujesz, musisz „zalogować się” ponownie :(. Ponieważ mój obiekt docelowy jest osadzony, nie mogę używać kluczy ssh, ponieważ wszystko jest nadpisywane, więc próbuję zrób to za pomocą jednego polecenia. rsync wygląda obiecująco, ale +1, ponieważ to odpowiada na pytanie :))
code_fodder
5
@code_fodder będziesz musiał również zalogować się za pomocą rsync. W rzeczywistości będziesz musiał zalogować się ponownie przy użyciu wszystkich metod. W rzeczywistości, z ssh można przynajmniej wykonać wiele poleceń w jednym zamachem: ssh you@host bash -c "command1;command2;command3; commandN".
terdon
@terdon To jest dobry punkt i działa naprawdę dzięki :)
code_fodder
4

Rsync skopiuje całą ścieżkę / drzewo i sprawdzi pliki znajdujące się już w miejscu docelowym i nie zawróci ich kopiowania, jeśli nie zostaną zmienione. Jeśli użyjesz opcji --delete, spowoduje to usunięcie wszystkich plików znajdujących się w miejscu docelowym, które nie są już w źródle. Działa nad ssh

jerm
źródło
Mieszałem się z rsync, jak ktoś wspomniał o tym w innym poście dotyczącym scp. Mam rsync zainstalowany na moim komputerze lokalnym, ale nie na komputerze zdalnym (jednostka wbudowana). Używałem polecenia, rsync -avz -e shh root@location:/path/to/dest /path/from/hostale nie powiedzie się po wprowadzeniu hasła sh: rsync: not found. Czy to oznacza, że ​​rsync musi istnieć na zdalnym komputerze? Dzięki!
code_fodder
1
@code_fodder tak, potrzebuje programu działającego w systemie zdalnym, aby powiedzieć mu, co ma robić. To nie jest zwykły program do kopiowania
Kanadyjczyk Łukasz
@CanadianLuke ... cholera :(
code_fodder
@code_fodder po prostu zainstaluj! Bardziej przydatny niż nie
Kanadyjczyk Łukasz
W zależności od wbudowanego rozwiązania rsync może być lub może nie być dostępny w jakimkolwiek stopniu łatwym ... chociaż jest to bardzo powszechna niestałość, tak jak powiedziałem, w zależności od wbudowanego rozwiązania. Uwaga: Rsync nie musi być cały czas uruchomiony, ale musi być obecny, aby był uruchamiany na żądanie.
jerm
3

Jeśli Twój zdalny serwer SSH obsługuje podsystem SFTP (większość tak, chyba że zostało to wyraźnie wyłączone), możesz użyć sftppowłoki (lub dowolnego innego klienta SFTP ) do manipulowania plikami i katalogami na zdalnym serwerze.

Niestety, jedna podstawowa sftppowłoka najwyraźniej nie obsługuje rekurencyjnego usuwania katalogu; aby usunąć katalog, musisz najpierw usunąć całą jego zawartość. Jednak większość innych klientów (zwłaszcza graficznych) zazwyczaj obsługuje tę funkcję.

(Nie wspominasz, jaki jest twój lokalny system operacyjny, ale jeśli jest to Linux, możesz użyć natywnego menedżera plików jako klienta GUI SFTP , wskazując go na adres URL taki jak sftp: // użytkownik @ host / ścieżka /. W systemie Windows WinSCP jest przyzwoitym klientem, a FileZilla to dobre rozwiązanie dla wielu platform).

Ilmari Karonen
źródło
1

Aby opróżnić zdalny (/ lokalny) katalog, użyj rsync w następujący sposób:

rsync -r --delete-excluded --exclude=* / server:/tmp/empty_this_dir/

Uważaj - usuwa wszystko poniżej określonego miejsca docelowego!

brachu
źródło
Próbowałem tego, ale zwraca błąd i nie usuwa katalogu zdalnego. żądanie wykonania nie powiodło się na kanale 0 rsync: połączenie niespodziewanie zamknięte (do tej pory odebrano 0 bajtów) [nadawca] błąd rsync: błąd niewyjaśniony (kod 255) w io.c (235) [nadawca = 3.1.2]
xarlymg89
Wygląda na to, że występuje problem z uruchomieniem rsync po zdalnej stronie lub nawet połączeniem przez ssh. Możesz spróbować ssh server rsync --versionlub ssh -v server rsync --versionznaleźć przyczynę.
br.
Dzięki za odpowiedź, ale znalazłem sposób na rozwiązanie problemu, nie tak elegancki, ale z podobnymi rezultatami. Spróbuję ponownie, ponieważ uważam, że będę musiał stawić temu czoła ponownie.
xarlymg89,
0

Alternatywnie, podłączenie zdalnego katalogu do lokalnego, a następnie usunięcie go rm -r /path_to_directory_to_removei na końcu podłączenie katalogu załatwia sprawę.

Oryginalna odpowiedź tutaj: /programming//a/24650511/973919

xarlymg89
źródło