web-dev-qa-db-ja.com

長いファイル名をサポートするWindows rsync、または良い代替手段?

現在、Linuxホストでrsyncを実行して、WindowsからLinuxボックスに物をコピーしています。ただし、長い名前のファイルはコピーできません。

私は DeltaCopycwrsync 、および cygwin を試しました。私がそこで見つけたものから、これらのツールはすべて、ファイルの長さが長くなるとファイルのコピーを拒否します。これは、255文字程度のようです。

この問題はcwrsyncフォーラム here で解決されており、cygwin 1.7がリリースされ、UTF8がサポートされている場合は、いつか修正される可能性があります。テストビルドもある here

私は、本番システムでのテストビルドの使用に特に慣れていません。私は誰かが別のrsyncオプションを知っていることを望んでいます。

Rsyncの代わりに、WindowsのホストからLinuxのディレクトリ構造をコピーできる、長いファイルや異常な名前のファイルで問題が発生しない別のツールを知っていますか?重要な点は、SSHトンネルを介して簡単に動作できるツールが必要なことです。一部のシステムはファイアウォールの外側にあり、SSHは私が使用を許可されるトンネルだと思います。

13
Zoredache

ポイントが足りないかもしれませんが、Windowsで Robocopy を使用することを検討してください。 RSyncに似ていますが、アプリケーションから直接スケジュールすることはできません。

これは、コピーのバッチファイルを作成してから、スケジュールされたタスクを作成することで解決できます。 Robocopyは無料で非常に堅牢です。私はよくSambaとネットワークを使用してLinuxとWindowsの間でファイルをコピーするためにそれを使用し、Robocopyの再開機能は本当に強力です。

6
BinaryMisfit

ああ! rsyncでsubstを使用できます。

深いディレクトリツリーd:\ very\long\file\n\ame\etc\etcがある場合、実験により、X:をd:\ very\long\file\name\etcに置換してから、/cygdrive/x/whateverから。これは、クライアント側とサーバー側の両方で機能します。

戦略的なsubstsを使用してファイル名の長さを減らすことができる一方で、260文字の制限を回避できるかどうかはわかりません。また、あまり便利ではないかもしれません。試してみる価値があります。

ジョン・レニー。

---- 8 <----

長いファイル名でのとりとめのないことについては、 http://www.ratsauce.co.uk/notablog/LongFilenames.asp を参照してください。

Cygwinに\\?\プレフィックスを取得する方法がわかりません。明らかに、Cygwinの現在のバージョンでは、内部でプレフィックスを使用していません。おそらく彼らは新しいバージョンでこれに対処しており、それが260文字を超える名前をサポートする理由です。私は至る所でCygwin rsyncを使用しているので、あなたのように熱心にリリースを待っています。

Cygwin rsyncには他にもいくつかの問題があります。 cygwin = nontsecを指定しない限り、ACLの混乱を引き起こし、非常に大きなディレクトリでハングする傾向があります。私が死ぬ前にすべきことの私のリストの中で、これらの問題を持たないrsyncのネイティブWindowsバージョンを書くことです。私はこれが行われたと信じていますが、商用バージョンとしてのみパブリックドメインバージョンとして。

JR

5
John Rennie

同じ問題(1.7より前のcygwinの制限事項)に遭遇し、ここにcygwin 1.7でcwrsyncの動作するビルドが見つかったことに注意してください:

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

(cwrsyncフォーラムから見つかった元のリンク)

正式なビルドではありませんが、文字セットの問題は解決されました:)

2
user21332

Unisonhttp://www.cis.upenn.edu/~bcpierce/unison/ を試してみることをお勧めします

bi-directionnal同期も提供できるため、rsyncの非常に興味深い代替手段です(rsyncでは実行できません)。私はすでに2台の仮想マシンで正常に使用しており、結果に非常に満足しています。

しかし、長いファイル名に関する限り、それが望みどおりに機能するかどうかはわかりません。

公式サイトから:

Unisonは、UnixおよびWindows用のファイル同期ツールです。これにより、ファイルとディレクトリのコレクションの2つのレプリカを異なるホスト(または同じホスト上の異なるディスク)に格納し、個別に変更して、各レプリカの変更を他のレプリカに伝達することで最新の状態にすることができます。

2

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

http://www.okisoft.co.jp/esc/utf8-cygwin/ 可能なパスサイズを増やす副作用があるUTF8レイヤーがあります。著者によると、より多くの文字を使用したい場合は、パッチで定数を上げることができます。それはさらにハックらしいです。

おそらくリモート同期のための最善の策ではありませんが、より長いファイル名をサポートすると主張するWindowsのrsyncです。

1
redblacktree

移植性を失わないために、rsyncを使い続け、255の制限を解決することをお勧めします。この制限はWindows内ではなくなり、RSYNCコード内にあります-実際、Windowsの制限は現在2048前後です(よく覚えている限り)。

私はあなたが指定したもの以外のrsyncポートがないことを確信しています。テスト版を使用して、見つけたバグを報告することをお勧めします。

FTPを使用してもかまわない場合は、LFTPを試すことができます。LFTPには非常に優れたミラーリング機能がありますが、バックアップ/同期に関してはrsyncと比較できません。

0
sorin

I スクリプトを一緒にハッキング これは、rsync(および他のプログラム)が処理できるように、ファイルまたはディレクトリの名前を一時的に短い名前に変更できます。これは、LinuxからWindowsにファイルをコピーするために使用しているツールチェーンの一部として使用できます(rsyncまたはその他)。 「珍しい」という意味がわからないので、これは要件の一部にしか対応していない可能性があります。参考になれば教えてください。

0
taltman

それで、ツールがWindowsで悪い場合、Linuxツールを使用する方法はありますか?

Ssh- sshfs

SSHなし-VPNを使用してSMBとしてマウントしますか?

どちらの方法でも、ファイルシステムに対してより機能的なLinux rsyncクライアントを使用できます。 10 GBのデータではこれを行っていないので、YMMVです。 :)

0
Cawflands

これは大きなファイル構造を作成しませんが、長い名前の比較的小さなデータセットの場合、7-Zipなどを使用して、rsyncが転送できるアーカイブを作成することを検討できます。 WindowsサーバーからLinuxサーバーにデータをプルする必要があるとおっしゃいました。シェルアクセスがある場合は、必要なデータをコンテナーにアーカイブし(7-Zip)コンテナーを転送し、サーバーに到達したらそれを展開します。これにより、長いファイル名の問題がアーカイバに押し付けられます。この問題には、Cygwin以外のツールとサポートの方が優れていると思います。

0
sysadmin1138