Obecnie rsync na hoście Linux, aby skopiować rzeczy z systemu Windows do mojego Linux-a. Ale nie mogę kopiować plików o długich nazwach.
Próbowałem DeltaCopy , cwrsync i cygwin . Z tego, co tam znalazłem, wszystkie te narzędzia odmawiają kopiowania plików, gdy długość pliku staje się długa, wydaje się, że jest to około 255 znaków.
Ten problem jest rozwiązywany na forach cwrsync tutaj i podobno może zostać rozwiązany w przyszłości, kiedy wyjdzie cygwin 1.7 i obsługiwany jest UTF8. Jest nawet build testowy tutaj .
Nie czuję się szczególnie komfortowo, korzystając z testowej wersji systemu produkcyjnego. Mam nadzieję, że ktoś wie o innej opcji rsync.
Czy jako alternatywa dla rsync znasz inne narzędzie, które mogę skopiować strukturę katalogów w systemie Linux z hosta systemu Windows, który nie będzie miał problemów z długimi lub nietypowymi nazwami plików? Ważne jest to, że potrzebuję narzędzia, które może z łatwością pracować w tunelu SSH. Niektóre systemy są poza zaporami ogniowymi i uważam, że SSH to tunel, z którego będę mógł korzystać.
źródło
Odpowiedzi:
Być może brakuje mi tego, ale zastanawiałeś się nad użyciem Robocopy w systemie Windows. Jest podobny do RSync, jednak nie można go zaplanować bezpośrednio z aplikacji.
Można temu zaradzić, pisząc plik wsadowy dla kopii, a następnie tworząc Zaplanowane Zadanie. Robocopy jest darmowy i wyjątkowo solidny. Często używam go do kopiowania plików między Linuksem a Windowsem przy użyciu Samby i sieci, a możliwość wznawiania Robocopy jest naprawdę potężna.
źródło
Aha! Możesz użyć subst z rsync.
Jeśli masz głębokie drzewo katalogów d: \ very \ long \ file \ n \ ame \ etc \ etc, eksperyment pokazuje, że możesz zastąpić X: do d: \ very \ long \ file \ name \ etc, a następnie rsync do i z / cygdrive / x / cokolwiek. Działa to zarówno po stronie klienta, jak i po stronie serwera.
Teraz, gdy możesz używać strategicznych podmień, aby skrócić długość nazw plików, nie wiem, czy to pozwoli ci ominąć limit 260 znaków. Może to również nie być zbyt wygodne. Warto jednak spróbować.
John Rennie.
---- 8 <----
Zobacz http://www.ratsauce.co.uk/notablog/LongFilenames.asp dla moich wędrówek na długich nazwach plików.
Nie znam żadnego sposobu na uzyskanie przedrostka \\? \ W Cygwin i oczywiście obecna wersja Cygwin nie używa tego przedrostka wewnętrznie. Prawdopodobnie zajmują się tym w nowej wersji i dlatego obsługuje nazwy dłuższe niż 260 znaków. Używam rsync Cygwin w całym miejscu, więc podobnie jak ty z niecierpliwością czekam na wydanie.
Istnieją inne problemy z rsync Cygwin. Robi bałagan list ACL, chyba że podasz cygwin = nontsec, i ma tendencję do zawieszania się na bardzo dużych katalogach. Na mojej liście rzeczy do zrobienia przed śmiercią jest napisanie natywnej wersji rsync dla Windows, która nie będzie miała tych problemów. Wierzę, że tak się stało, ale tylko w wersjach komercyjnych, a nie w domenie publicznej.
JR
źródło
Sugeruję wypróbowanie Unison http://www.cis.upenn.edu/~bcpierce/unison/
Jest to bardzo interesująca alternatywa dla rsync, ponieważ może również zapewniać dwukierunkową synchronizację (czego rsync nie jest w stanie wykonać). Użyłem go już z powodzeniem na 2 maszynach wirtualnych i byłem bardzo zadowolony z rezultatów.
Ale jeśli chodzi o długą nazwę pliku, nie wiem, czy działa tak, jak chcesz.
Z oficjalnej strony:
źródło
Tylko uwaga, że napotkałem ten sam problem (ograniczenia cygwin w wersji wcześniejszej niż 1.7) i znalazłem działającą wersję cwrsync z cygwin 1.7 tutaj:
http://www.doering-thomas.de/page.php?seite=1&sub=6&lang=en#rsync
(Oryginalny link znaleziony na forach cwrsync)
Nie do końca oficjalna wersja, ale rozwiązało to problemy z charsetem :)
źródło
http://lists.samba.org/archive/rsync/2009-March/022955.html
http://www.okisoft.co.jp/esc/utf8-cygwin/ Ma warstwę UTF8, która ma efekt uboczny polegający na zwiększeniu możliwego rozmiaru ścieżki. Według autora, jeśli chcesz użyć więcej znaków, możesz zwiększyć stałą w łatce. To wydaje się jeszcze bardziej hackerskie.
Prawdopodobnie nie jest to najlepszy wybór do zdalnej synchronizacji, ale jest to Windows rsync, który twierdzi, że obsługuje dłuższe nazwy plików.
źródło
Więc jeśli narzędzia są złe w systemie Windows, czy istnieje sposób na użycie narzędzia Linux?
Z ssh - sshfs ?
Bez ssh - użyć VPN i zamontować jako SMB?
Tak czy inaczej pozwoli ci użyć bardziej wydajnego klienta Linux rsync przeciwko systemowi plików. Nie zrobiłem tego z 10 GB danych, więc YMMV. :)
źródło
Nie zrobi to dużych struktur plików, ale w przypadku stosunkowo małych zestawów danych o długich nazwach można rozważyć użycie czegoś takiego jak 7-Zip do utworzenia archiwum, które rsync mógłby następnie przesłać. Powiedziałeś, że musisz pobrać dane z serwerów Windows na serwer Linux. Jeśli masz dostęp do powłoki, zarchiwizuj potrzebne dane w kontenerze (7-zip) przenieś kontener i rozszerz go, gdy dotrze do serwera. Spycha to problem długiej nazwy pliku do archiwizatora, dla którego uważam, że jest lepsza obsługa i narzędzia inne niż Cygwin.
źródło
Aby nie stracić przenośności, polecam pozostać przy rsync i spróbować rozwiązać ograniczenie 255. To ograniczenie nie występuje już w systemie Windows i jest zawarte w kodzie RSYNC - w rzeczywistości limit w systemie Windows wynosi obecnie około 2048 (o ile dobrze pamiętam).
Jestem prawie pewien, że nie ma innych portów rsync niż te określone przez ciebie i sugeruję, abyś użył wersji testowej i zgłosił wszelkie znalezione błędy.
Jeśli nie masz nic przeciwko korzystaniu z FTP, możesz wypróbować LFTP - ma on bardzo dobrą funkcję kopii lustrzanej, ale nie porównuje się z rsync, jeśli chodzi o tworzenie kopii zapasowych / synchronizację.
źródło
I hacked razem skrypt , który może tymczasowo zmieniać nazwy plików lub katalogów z krótszych nazw tak, że rsync (i inne programy) można kontynuować. Możesz użyć tego jako części łańcucha narzędzi, którego używasz do kopiowania plików z systemu Linux na Windows (rsync lub w inny sposób). Nie wiem, co rozumiesz przez „niezwykły”, więc być może dotyczy to tylko części twoich wymagań. Daj mi znać, jeśli Ci to pomoże.
źródło