特殊文字を含むファイルをUSB FAT32に再同期する


8

FAT32でフォーマットされたUSBドライブに多数のファイルをコピーしたい(残念ながらそれ以外はフォーマットできない)。

これらのファイルの多くには、などの文字を含む名前が:あり?、FAT32では許可されていません。cpまたはを使用しようとするとrsync、これらのファイルはコピーされず、その旨を示すエラーが報告されます。

コピー元でファイルの名前を変更したくないのですが、コピー先のUSBドライブでファイルの名前を変更する必要もありません。

目的の明確化(他のコメントにも適用されます):これは車のmp3プレーヤー向けであり、ソフトウェアはFAT32のみを許可します。したがって、バックアップの目的ではありません。そして、ファイル名に奇妙な文字が含まれている理由は、それらが、たとえばmp3のタイトルやアーティストの名前であるためです。

私はいくつかのことを試しました:

  1. rsyncの--iconvオプション。これは機能していないようですが、おそらく正しく使用していません。
  2. rdiff-backup私が読んだは、デフォルトでこの変換を行います。ただし、ソースファイルは私がたどりたいシンボリックリンク(つまりrsyncの-Lオプション)であり、マンページからrdiff-backupはこのオプションが付いていないようです。

他に何か提案はありますか?


まず、USBドライブを再フォーマットできないのはなぜですか。また、コロンと疑問符が含まれたファイル名があるのはなぜですか。これらの文字はソースドライブのファイルシステムで許可されていますが、シェルの作業と移植性に問題がある傾向があります。また、rsync--iconvオプションは、それを使用しようとしているものに対して作成されていません。
2013

1
@depquidバグのあるシェルコードを記述した場合、それはシェル作業でのみ問題になります。
ヨルダン2013

@jordanmインタラクティブなシェルの使用についてもっと考えていました。確かにそれは可能ですが、より標準的な文字で作業する方が便利です。
2013

1
参考までに--iconv、latin1 <-> utf8などの文字セット変換を行います。あなたが探しているものではありません。
derobert 2013

回答:


4

rsyncは--iconvオプションになりますが、あなたはエンコーディングを定義する最初の必要があると思い?:他はFATファイルシステム上で許可されている文字でエンコードされているとします。

ユースケースでは、これにrsyncのすべての機能を使用しているわけではありません。このタスクは、数行のシェルスクリプトで実行できます。

以下は、ターゲットで古いファイルをスキップしてにコピー~/Music/media/usb99、変換:?てに変換するbashスクリプトです_。それは(私はあなたが両方持っていないと仮定衝突を検出していないfoo:bar.mp3としますfoo?bar.mp3)。

#!/bin/bash
set -e
shopt -s dotglob globstar
cd ~/Music
for source in **/*; 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 ]]


2

バックアップ目的の場合は、tarballを隠しておいてください。ファイル名はそのように面倒ではありません。


1
目的の明確化(他のコメントにも適用されます):これは車のmp3プレーヤー向けであり、ソフトウェアはFAT32のみを許可します。したがって、バックアップの目的ではありません。そして、ファイル名に奇妙な文字が含まれている理由は、それらが、たとえばmp3のタイトルやアーティストの名前であるためです。
atorgovitsky 2013

3
@atorgovitskyこれらの詳細を提供するには、元の質問を編集する必要があります。
2013
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.