USBキーでrsyncするときにコロンを置き換えるにはどうすればよいですか?


12

USBキーでメールディレクトリをバックアップしたいのですが。ただし、私のIMAPには、何かにコロン(:)文字が含まれるという奇妙な命名規則があります。USBはウィンドウ形式であるため、rsyncはこれらのファイルの作成に失敗します。rsyncの実行時にコロン文字をアンダースコアに置き換える方法はありますか?(または別のツールと同じ同期を行うには?)

コメントで明確にしたほんのいくつかのポイント:

  • これは最悪のシナリオのバックアップです。Windowsマシンで何もインストールせずに読み取れるようにしたいと思います。
  • 一定のデータがたくさんありました。したがって、新しいファイルをコピーするだけのツールがあれば、時間を大幅に節約できます。
  • 私はrsyncの書き直しを探していません。すぐに使用できる既存のツールを探しています。

ありがとう

回答:


8

単純なrsyncの代わりにrdiff-backupを使用します。デスティネーションディスクでサポートされていない文字を自動的に検出して置換し、さらにUNIXファイルシステムに復元したときの状態に戻します。これは、オリジンと1つの追加のメタデータディレクトリのように見えるアンパックディレクトリを生成します。


6

最も簡単なアプローチは、ファイルシステム層を活用してファイル名を変換することです。Ubuntu 12.04以降、ファイル名をWindowsのVFATがサポートする名前に変換するFUSEファイルシステムがあります:fuse-posixovl fuse-posixovlをインストールする

sudo mount.posixovl /media/sdb1
chown guillaume /media/sdb1
rsync -au ~/mail /media/sbd1/

または、rootアクセスを必要としないようにするには:

mkdir ~/mnt
/sbin/mount.posixovl -S /media/sdb1 ~/mnt
rsync -au ~/mail ~/mnt/

VFATは受け入れないことを、ファイル名の文字は、次のようにエンコードされている%(XX)場所をXX16進数です。POSIXovl 1.2.20120215の時点で、などのファイル名%(3A)はそれ自体としてエンコードされ:、としてデコードされることに注意してください%(XX)

POSIXovlは長すぎるファイル名に対応していないことに注意してください。エンコードされた名前が255文字に収まらない場合、ファイルを保存できません。

POSIXovlは、UNIXの許可と所有権をというファイルに保存します.pxovl.FILENAME


次のbash≥4スクリプトは、にコピー~/mail/foo:bar/media/usb99/mail/foo_barます~/mail。宛先ツリーにすでに存在し、ソースより古くないファイルはスキップされます。

#!/bin/bash
set -e
shopt -s dotglob globstar
for source in "$HOME"/mail/**/*; do
  target=/media/usb99/${source#"$HOME"/}
  target=${target//:/_}
  if [[ -d $source ]]; then
    mkdir -p -- "$target"
  elif [[ $target -ot $source ]]; then
    cp -p -- "$source" "$target"
  fi
done

このスクリプトは、軽微な改変とzshの下に動作します:置き換えるshopt -s dotglob globstarことにより、setopt dot_globおよび[[ $target -ot $source ]]によって[[ ! -e $target || $target -ot $source ]]


zshの2ライナー(オートロードをカウントする場合は3ライナー)があります。短いですが、かなり高度で読みにくいです。

autoload zargs zmv
zargs -- ~/mail/**/*(/e\''REPLY=/media/usb99/${${REPLY#$HOME/}//:/_}'\') -- mkdir -p --
zmv -C -Q -o -pu '~/mail/(**/)(*)(.)' '/media/usb99/mail/${1//:/_}${2//:/_}'
  • このzargs行はmkdir -p ~/mail/**/*(…)、ディレクトリ名の累積された長さが長すぎる場合に爆破されないことを除いて、と同等です。その行は、必要に応じてターゲットディレクトリを作成します。
  • ~/mail/**/*(/)下のすべてのディレクトリに展開します~/mail(ディレクトリ(/)は最後にあるため)。
  • (/e\''…'\')ディレクトリのみを選択し、「…」内のコードをさらに実行して、REPLY変数に保存されている各ファイル名を変換します。
  • ${${REPLY#$HOME/}//:/_}ソースディレクトリに対応するプレフィックスを削除し、に変更:_ます。
  • zmv -C 第1オペランド(zshパターン)に一致する各ファイルを、第2オペランドを展開して取得したファイル名にコピーします。
  • -o -pu許可を保持し、更新されたファイルのみをコピーするため-puに、cpユーティリティに渡すように指示します。(更新チェックを実行するようにzshに指示することができます。それは少し高速ですが、さらに不可解です。)
  • (.)通常のファイルのみを選択します。-Qこれは.、サブ式を示す括弧で囲まれたものとしてではなく、グロブ修飾子として解析されることを示しています。
  • $1および$2置換テキストでは、括弧で囲まれた式(**/)とに一致します*。(**括弧内に正確に**/。が含まれていない限り、括弧内にある場合、サブディレクトリレベルが0個以上であるという特別な意味を失います。)

最初はpaxを使用することを考えました。これは、ファイル名変更機能(-sオプション)を備えたアーカイブツール(ここではパススルーモードで使用することを目的としています)です。ただし、オプション-s-uオプションは一緒に機能しません(paxPOSIX定義では、文字-uによって変換されるファイル名ではなく、宛先ツリー内の同じ名前のファイルをチェックする必要があると言われてい-sます; Ubuntuのpax実装は、便利に)。名前変更されたハードリンクを作成するためにそれを利用し、ハードリンクを(rsync -auまたはでpax -rw -pp -u)他のメディアにコピーすることはまだ可能ですが、それは価値以上のトラブルを感じます。

cd ~/mail
mkdir -p /media/usb99/mail
pax -rw -l -pp -s '!:!_!g' . ../mail.colonless
rsync -au ../mail.colonless/ /media/usb99/mail/

paxを使用してみます。たぶん、ubuntuで必要なパッケージを指定することで、答えを改善できるかもしれません。通常のインストールの一部ではないようです。
ギヨームコテ

paxという単一のパッケージを追加するだけで機能します。
ギヨームコテ

何も出力されません。-vオプションを追加して、何が起こっているのかを確認します。毎回すべてをコピーしているようです。rsyncのポイントはインクリメンタルであるため、多くのファイルの途中でいくつかの変更されたファイルがあるだけで多くの時間を節約できました。
ギヨームコテ

指定したパスの下に「ホーム」ディレクトリを作成しているようです。スクリプトでディレクトリを変更しないようにすることをお勧めしますが、これらすべてのディレクトリの作成を回避する別の可能性はありますか?
ギヨームコテ

すべてが同じである2回目のパスで5分かかりました。rsyncには数秒しかかかりませんでした。インクリメンタルにするために指定する必要があるオプションはありますか?
ギヨームコテ

-1

USBメモリスティックとモバイルUSBディスクで行うことは、FAT32パーティションとext4パーティションの2つのパーティションでパーティションを作成することです。最初はLinux以外のユーザーとデータを交換するために使用でき、2番目はUbuntuシステムで個人的に使用するためです(他のLinuxユーザーと交換するためかもしれません)。ext4パーティションでは、「:」の問題は発生しません。


Windowsコンピューターの情報が必要になった場合に備えて、バックアップをどこからでも読み取れるようにします。そうでなければ、USBキーをUNIXファイルシステムに再フォーマットします。それが私が代替について尋ねている理由です。
ギヨームコテ

いくつかのツールまたはファイルシステムドライバーをインストールすると、Windowsで少なくともext2 / ext3を読み取ることできます。すべてのWindowsシステムで読むことができますか、それとも自分のシステム(必要な場合に必要なツールをインストールできる場所)でのみ読むことができますか?
JanC

ところで:理論上はNTFSシステムにも保存できるはずですが、ほとんどのWindowsアプリケーション(Microsoftのほとんどを含む)はNTFSを正しくサポートしていません...:P
JanC

これは最悪の場合の回復バックアップなので、コンピューターに何かをインストールする権利がないため、何かをすばやく必要とする場合に備えて準備したいと思います。
ギヨームコテ

-2

tarアーカイブの作成に使用できます。これにより、名前を変更する必要がなく、必要なファイルシステムに保存できます。


zipファイルまたはtgzでも同じことができますが、毎回変更されていないファイルを書き換えます。メディアは書き込み数が限られているため、数ギブのデータを取得しているため、新しい1kbファイルが追加されたからといって、すべてを書き換えることは避けたいと思います。
ギヨームコテ

最近のフラッシュメモリの書き換えは、通常数百万または少なくとも数十万に「制限」されています。そんなに多くのバックアップを作成するつもりはないでしょう。;)
JanC

2
-1 -azvアーカイブを作成しません、それがファイル属性保持手段アーカイブモードコピーし
ジョアン・ピント

残念ながら、rsyncでそれができると本当に思っていたので、tarに変更しましたが、tarで増分バックアップができるかどうかはわかりません。ただし、JanCは正しく、書き換えは問題になりません。
デヴィッド・

書き換えに関するJanCのコメントについては、制限があるという事実だけでなく(前回確認したときに、1000から100万に近かった)、また、 1分未満である必要があります。
ギヨームコテ
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.