FAT32でフォーマットされたUSBドライブに大量のファイルをコピーしたいです。 (残念ながら他のフォーマットではフォーマットできません。)
これらのファイルの多くには、:
FAT32 で許可されていない文字が含まれています。またはを?
使用しようとすると、ファイルはコピーされず、それを知らせるエラーが報告されます。cp
rsync
ソース内のファイルの名前を変更したくありませんが、ターゲットUSBドライブのファイル名がどのように変わるかは関係ありません。
目的の説明(他の説明にも適用されます):これは自動車のMP3プレーヤー用であり、ソフトウェアはFAT32のみを許可します。したがって、バックアップ目的には使用されません。ファイル名に奇妙な文字が表示されるのは、例えばmp3タイトルやアーティスト名によるものです。
私はいくつか試しました:
- rsyncオプション
--iconv
。うまくいかないようですが、正しく使用していない可能性があります。 rdiff-backup
、この変換が基本的に行われることを読みました。しかし、ソースファイルは私が従いたいシンボリックリンク(-L
rsyncオプションなど)であり、マンページにはこのオプションがないようですrdiff-backup
。
他に提案がありますか?
ベストアンサー1
Rsync with--iconv
はオプションですが、まず、他のエンコーディングがFATファイルシステムで許可されている文字を使用する?
エンコーディングを定義する必要があります。:
あなたのユースケースでは、rsyncのすべての機能を使用するわけではありません。これは数行のシェルスクリプトで実行できます。
これは、ターゲットから古いファイルをコピーし~/Music
てスキップしてからに変換するbashスクリプトです。衝突を検出できません。と両方を使用しないとします。/media/usb99
:
?
_
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
スクリプトは少し変更され、zshshopt -s dotglob globstar
で実行されます。setopt dot_glob
[[ $target -ot $source ]]
[[ ! -e $target || $target -ot $source ]]