Назад | Перейти на главную страницу

Windows rsync, поддерживающий длинные имена файлов, или хорошая альтернатива?

В настоящее время я использую rsync на хосте Linux, чтобы копировать вещи из Windows в свой Linux. Но я не могу копировать файлы с длинными именами.

я пытался DeltaCopy, cwrsync, и Cygwin. Из того, что я нашел там, все эти инструменты отказываются копировать файлы, когда длина файла становится длинной, кажется, что это где-то около 255 символов.

Эта проблема решается на форумах cwrsync. Вот и, предположительно, это может быть исправлено когда-нибудь в будущем, когда выйдет cygwin 1.7 и будет поддерживаться UTF8. Есть даже тестовая сборка Вот.

Мне не очень удобно использовать тестовую сборку в производственной системе. Я надеюсь, что кто-то знает другой вариант rsync.

В качестве альтернативы rsync знаете ли вы другой инструмент, с помощью которого я могу скопировать структуру каталогов в Linux с хоста Windows, у которого не будет проблем с длинными или необычно названными файлами? Важным моментом является то, что мне нужен инструмент, который может легко работать через туннель SSH. Некоторые системы находятся за пределами брандмауэров, и я считаю, что SSH - это туннель, который мне будет разрешено использовать.

Возможно, я упускаю суть, но думали ли вы об использовании Робокопия в Windows. Он похож на RSync, но вы не можете запланировать его напрямую из приложения.

Это можно решить, написав пакетный файл для копии, а затем создав запланированную задачу. Robocopy бесплатен и чрезвычайно надежен. Я часто использую его для копирования файлов между Linux и Windows с помощью Samba и сети, и возможность возобновления работы Robocopy действительно мощная.

Ага! Вы можете использовать subst с rsync.

Если у вас есть глубокое дерево каталогов d: \ very \ long \ file \ n \ ame \ etc \ etc, то эксперимент показывает, что вы можете подставить X: в d: \ very \ long \ file \ name \ etc, а затем rsync to и из / cygdrive / x / что угодно. Это работает как на стороне клиента, так и на стороне сервера.

Теперь, когда вы можете использовать стратегические подстановки для уменьшения длины имен файлов, я не знаю, позволяет ли это обойти ограничение в 260 символов. Это тоже может быть не очень удобно. Тем не менее, стоит попробовать.

Джон Ренни.

---- 8 <----

Видеть http://www.ratsauce.co.uk/notablog/LongFilenames.asp за мою бессвязную речь о длинных именах файлов.

Я не знаю способа получить префикс \\? \ Для Cygwin, и, очевидно, текущая версия Cygwin не использует префикс для внутренних целей. Предположительно они решают это в новой версии, и поэтому она будет поддерживать имена длиной более 260 символов. Я использую Cygwin rsync повсюду, поэтому, как и вы, я с нетерпением жду релиза.

Есть и другие проблемы с Cygwin rsync. Он создает беспорядок в ACL, если вы не укажете cygwin = nontsec, и имеет тенденцию зависать в очень больших каталогах. В моем списке вещей, которые нужно сделать, прежде чем я умру, - написать собственную версию rsync для Windows, у которой не будет этих проблем. Я считаю, что это было сделано, но только в коммерческих версиях, а не в общедоступных.

JR

Я предлагаю вам попробовать Унисон http://www.cis.upenn.edu/~bcpierce/unison/

Это очень интересная альтернатива rsync, потому что она также предоставляет двунаправленный синхронизация (которую rsync не может сделать). Я уже успешно использовал его на двух виртуальных машинах и остался очень доволен результатами.

Но что касается длинного имени файла, я не знаю, работает ли оно так, как вы хотите.

С официального сайта:

Unison - это инструмент для синхронизации файлов для Unix и Windows. Он позволяет хранить две реплики набора файлов и каталогов на разных хостах (или разных дисках на одном и том же хосте), изменять их отдельно, а затем обновлять путем распространения изменений в каждой реплике на другую.

Замечу, что я столкнулся с той же проблемой (ограничения cygwin до версии 1.7) и нашел здесь рабочую сборку cwrsync с cygwin 1.7:

http://www.doering-thomas.de/page.php?seite=1&sub=6&lang=en#rsync

(Исходная ссылка найдена на форумах cwrsync)

Не совсем официальная сборка, но она решила мои проблемы с кодировкой :)

http://lists.samba.org/archive/rsync/2009-March/022955.html

http://www.okisoft.co.jp/esc/utf8-cygwin/ Имеет слой UTF8, побочным эффектом которого является увеличение возможного размера пути. По словам его автора, если вы хотите использовать больше символов, вы можете увеличить константу в патче. Это кажется еще более хакерским.

Вероятно, не лучший вариант для удаленной синхронизации, но это Windows rsync, которая утверждает, что поддерживает более длинные имена файлов.

Итак, если инструменты в Windows плохие, есть ли способ использовать инструмент Linux?

С ssh - sshfs?

Без ssh - использовать VPN и монтировать как SMB?

В любом случае вы сможете использовать более способный клиент rsync Linux для работы с файловой системой. Я не делал этого с 10 ГБ данных, поэтому YMMV. :)

Это не будет работать с большими файловыми структурами, но для относительно небольших наборов данных с длинными именами вы можете использовать что-то вроде 7-Zip для создания архива, который затем может передать rsync. Вы сказали, что вам нужно перетащить данные с серверов Windows на сервер Linux. Если у вас есть доступ к оболочке, заархивируйте нужные данные в контейнере (7-zip), перенесите контейнер и разверните его, когда он попадет на сервер. Это подталкивает архиватор к проблеме длинных имен файлов, для которой, я считаю, есть лучшая поддержка и инструменты, отличные от Cygwin.

Чтобы не потерять переносимость, я бы порекомендовал вам остаться с rsync и попытаться устранить ограничение 255. Это ограничение больше не в Windows, а в коде RSYNC - на самом деле ограничение в Windows сейчас составляет около 2048 (если я хорошо помню).

Я почти уверен, что нет других портов rsync, кроме указанных вами, и я предлагаю вам использовать тестовую версию и сообщать обо всех обнаруженных вами ошибках.

Если вы не против использования FTP, вы можете попробовать LFTP - у него есть очень хорошая функция зеркалирования, но она не сравнивается с rsync, когда дело доходит до резервного копирования / синхронизации.

я взломал скрипт который может временно переименовывать файлы или каталоги с более короткими именами, чтобы rsync (и другие программы) могли продолжить работу. Вы можете использовать это как часть цепочки инструментов, которые вы используете для копирования файлов из Linux в Windows (rsync или иначе). Я не знаю, что вы подразумеваете под «необычным», так что, возможно, это касается только части ваших требований. Пожалуйста, дайте мне знать, если это будет вам полезно.