В настоящее время я использую 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 или иначе). Я не знаю, что вы подразумеваете под «необычным», так что, возможно, это касается только части ваших требований. Пожалуйста, дайте мне знать, если это будет вам полезно.