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

13

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

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

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

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

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

Zoredache
источник
К вашему сведению, cwrsync выпустил обновление, основанное на cygwin 1.7, которое поддерживает длинные имена файлов! itefix.no/i2/node/12070
Zoredache

Ответы:

6

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

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

BinaryMisfit
источник
Робокопия - это вариант, который я рассматривал, но он работает в неправильном направлении (переход от win к lin), я хотел использовать Windows на Linux. Я подозреваю, что мне, возможно, придется пойти в этом направлении, если я не могу найти что-то лучше.
Зоредаче
5

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

Если у вас есть глубокое дерево каталогов d: \ very \ long \ file \ n \ ame \ etc \ etc, то эксперимент показывает, что вы можете заменить X: на d: \ very \ long \ file \ name \ etc, а затем выполнить rsync для и из / 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

Джон Ренни
источник
Rsync зависает на больших каталогах, потому что сначала он должен прочитать все файлы. Проблема в том, что Windows сначала читает все файлы, а затем запускается rsync. Windows может занять несколько минут для сканирования каталога в зависимости от количества файлов.
Райан
Это больше не относится к rsync 3.0. Теперь он отправляет добавочный список файлов, чтобы он мог начать отправку файлов раньше.
Джеймс Снирингер
2

Я бы посоветовал вам попробовать Unison http://www.cis.upenn.edu/~bcpierce/unison/

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

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

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

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

Оливье Жакемет
источник
Вы использовали его с путями длиннее 250 символов? Похоже, что единственный способ получить его на Windows - через Cygwin, что, я считаю, означает, что у него будет точно такая же проблема, как и у меня с Cygwin rsync.
Зоредаче
Я не тестировал длинный путь, но двоичные файлы Unison для Windows создаются с использованием cygwin.dll (он входит в состав двоичных файлов, нет необходимости устанавливать cygwin), поэтому он может работать правильно. Попробуйте :)
Оливье Жакем
2

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

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

(Оригинальная ссылка найдена на форумах cwrsync)

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


источник
1

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

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

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

redblacktree
источник
Этот пост меня немного беспокоит ( cygwin.com/ml/cygwin/2006-05/msg00068.html ) - «По сути, есть патч из 930 строк, большинство из которых новые. FWICS, он может не охватывать все места, где Unicode может потребоваться преобразование (в частности, отправка Unicode через канал текстового режима, скорее всего, приведет к сбою) »
Zoredache
0

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

С помощью ssh - sshfs ?

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

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

Cawflands
источник
Я пытаюсь вытащить файлы из окон на мой компьютер с Linux. Кроме того, я действительно не хочу создавать архив, поскольку я говорю о большом количестве данных 10 ГБ +, которые я хочу синхронизировать еженедельно. Если я соберу архив, я не получу выгоду от дополнительных обновлений.
Зоредаче
ОК, пересмотренный ответ.
Cawflands
0

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

sysadmin1138
источник
0

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

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

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

Сорин
источник
0

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

taltman
источник