Linux odpowiada robocopy?

34

To trochę zabawne, istnieje wiele sposobów, w jakie narzędzia wiersza poleceń Linuksa są znacznie lepsze niż narzędzia Windows, ale jedna rzecz, której nie znalazłem, jest robocopy . Robocopy jest o wiele bardziej wszechstronny cpi nie mogę wymyślić, jak zrobić to, co chcę z narzędziami Linux.

Szczególny przypadek użycia polega na tym, że mam dwa katalogi z przeważnie podobnymi plikami, ale jeden ma nowsze pliki źródłowe, a drugi zawiera pliki zawartości, których nie ma drugi katalog, i być może nowsze pliki źródłowe (dla strony internetowej). Chcę skopiować pliki z drugiego katalogu do poprzedniego, dodając nowe pliki zawartości i takie, ale nie zastępując nowszych plików w katalogu docelowym.

Próbowałem wymyślić, jak to zrobić w Linuksie, może przez pół godziny, zdecydowałem, że prawdopodobnie będę musiał nauczyć się skryptowania bash lub czegoś, co chcę, a potem zdałem sobie sprawę, że mogę po prostu użyć robocopy. Miałem też inne wymagania. Zasadniczo konwertowałem witrynę Python (Django) z repozytorium SVN do repozytorium Git i chciałem się upewnić, że nie wprowadzę niezatwierdzonych zmian w SVN. Chciałem jednak warunkowo wykluczyć .svnkatalogi i .pycskompilowane pliki Pythona. Następujące polecenie robocopy robi dokładnie to, co chcę:

robocopy source destination /XO /E /XD .svn /XF *.pyc

Czy jest jakiś odpowiednik Robocopy w Linuksie? Zajrzałem do niego rsynckrótko, ale wydawało mi się, że musiałbym skonfigurować serwer rsync przed próbą synchronizacji folderów.

Ibrahim
źródło
1
Nie musisz konfigurować serwera rsync, rsync over ssh automatycznie uruchamia rsync na zdalnym komputerze w trybie serwera (w sposób, który jest używany tylko do tego połączenia, działa na twoim koncie i zamyka się automatycznie, gdy jest zrobione) .
CesarB
„… Ale wydawało mi się, że musiałbym skonfigurować serwer rsync, zanim spróbuję zsynchronizować foldery.” Używam Rsync od lat i nigdy nie musiałem konfigurować oficjalnego serwera Rsync. W rzeczywistości wiele narzędzi do synchronizacji / tworzenia kopii zapasowych w systemie macOS wykorzystuje Rsync jako rdzeń bez potrzeby konfigurowania serwera, takiego jak Carbon Copy Cloner i - uważam - SuperDuper!
JakeGould,

Odpowiedzi:

38

Wygląda na to, że rsync jest zdecydowanie tym, czego szukasz. Nie trzeba konfigurować „serwera rsync”, aby kopiować pliki z jednego komputera na drugi. Rsync obsługuje kopiowanie plików przez SFTP (SSH File Transfer), które większość Linuksów już włączyło (jeśli nie zostało ręcznie wyłączone).

Zobacz pliki Mirror Lifehackera pomiędzy systemami za pomocą rsync, aby uzyskać więcej informacji:

Niezależnie od tego, czy chcesz wykonać kopię zapasową danych, bezpiecznie dystrybuować pliki lub kopiować dokumenty robocze przez Internet z biura do domu, między komputerami w sieci lokalnej lub z komputera na serwer sieciowy, rsync może wykonać zadanie. Dziś użyjemy rsync do tworzenia kopii lustrzanych folderów między komputerem Mac i PC za pośrednictwem bezpiecznego połączenia w wierszu polecenia.

Rsync jest darmowy (jak w mowie) i wieloplatformowy, co oznacza, że ​​synchronizuje pliki między systemami operacyjnymi (Windows / Cygwin, Mac OS, Linux); działa na ssh, więc jest szyfrowany i bezpieczny; w przeciwieństwie do FTP to przyrostowe , więc tylko części z zmienione pliki są przesyłane, a nie całych plików , co sprawia, że iść jak Speedy Gonzales; a fakt, że jest to wiersz poleceń, umożliwia tworzenie skryptów i łatwą automatyzację.

Josh Hunt
źródło
Przeczytaj stronę manuala rsync - aby użyć ssh (bez jawnego serwera rsync) użyjesz „-e ssh”
Doug Harris
1
rsync jest niesamowity! I nie musisz używać -e, ponieważ każda ścieżka, taka jak uż[email protected]: / blah / automatycznie go użyje.
How-To Geek
Mmm, to spoko. Więc może używać zasadniczo scppodobnej składni do przesyłania przez ssh? Próbowałem przesłać pliki na jednym komputerze, ale warto o tym wiedzieć.
Ibrahim,
1
Niestety, ta odpowiedź nie jest całkowicie poprawna: chociaż używa SSH, nie używa SFTP. Zamiast tego komunikuje się ze zdalną instancją rsync bezpośrednio przy użyciu protokołu rsync.
Daniel B
15

rsync skopiuje pliki z jednego katalogu do innego katalogu na tym samym komputerze, na przykład robocopy. Oto polecenie rsync równoważne z poleceniem robocopy:

rsync -auv --exclude '.svn' --exclude '*.pyc' source destination

Spowoduje to rekurencyjne skopiowanie źródła do miejsca docelowego i wykluczenie starszych plików oraz katalogów / plików „.svn” i „* .pyc”.

Sean Staats
źródło
Z wyjątkiem tego, że zrobi to w jednym wątku, co może spowodować ponad 5-krotny spadek wydajności w zależności od ilości pośrednich rozwiązań pamięci masowej.
Michaił
Plik usunięty ze źródła nie jest synchronizowany z miejscem docelowym.
Jirong Hu