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

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

FAT32でフォーマットされたUSBドライブに大量のファイルをコピーしたいです。 (残念ながら他のフォーマットではフォーマットできません。)

これらのファイルの多くには、:FAT32 で許可されていない文字が含まれています。またはを?使用しようとすると、ファイルはコピーされず、それを知らせるエラーが報告されます。cprsync

ソース内のファイルの名前を変更したくありませんが、ターゲットUSBドライブのファイル名がどのように変わるかは関係ありません。

目的の説明(他の説明にも適用されます):これは自動車のMP3プレーヤー用であり、ソフトウェアはFAT32のみを許可します。したがって、バックアップ目的には使用されません。ファイル名に奇妙な文字が表示されるのは、例えばmp3タイトルやアーティスト名によるものです。

私はいくつか試しました:

  1. rsyncオプション--iconv。うまくいかないようですが、正しく使用していない可能性があります。
  2. rdiff-backup、この変換が基本的に行われることを読みました。しかし、ソースファイルは私が従いたいシンボリックリンク(-Lrsyncオプションなど)であり、マンページにはこのオプションがないようですrdiff-backup

他に提案がありますか?

ベストアンサー1

Rsync with--iconvはオプションですが、まず、他のエンコーディングがFATファイルシステムで許可されている文字を使用する?エンコーディングを定義する必要があります。:

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

これは、ターゲットから古いファイルをコピーし~/Musicてスキップしてからに変換するbashスクリプトです。衝突を検出できません。と両方を使用しないとします。/media/usb99:?_foo:bar.mp3foo?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 ]]

おすすめ記事