Rsyncieren von Dateien mit Sonderzeichen auf USB FAT32

8

Ich möchte eine große Anzahl von Dateien auf ein USB-Laufwerk kopieren, das mit FAT32 formatiert ist (und leider nichts anderes formatiert werden kann).

Viele dieser Dateien haben Namen mit Zeichen wie :und ?die FAT32 nicht zulässt. Beim Versuch, cpoder zu verwenden rsync, werden diese Dateien nicht kopiert, und es wird ein Fehler gemeldet, der dies angibt.

Ich möchte die Dateien an der Quelle nicht umbenennen, aber es ist mir auch egal, in was die Dateien auf dem Ziel-USB-Laufwerk umbenannt werden.

Klarstellung des Zwecks (gilt auch für die anderen Kommentare): Dies gilt für einen MP3-Player in einem Auto und die Software erlaubt nur FAT32. Es ist also nicht für Backup-Zwecke. Und die Gründe, warum die Dateinamen seltsame Zeichen haben, sind, dass es sich um Titel von MP3s oder Namen von Künstlern handelt.

Ich habe ein paar Dinge ausprobiert:

  1. --iconvOption von rsync . Das schien nicht zu funktionieren, aber vielleicht habe ich es nicht richtig benutzt.
  2. rdiff-backup, die ich gelesen habe, führt diese Konvertierung standardmäßig durch. Die Quelldateien sind jedoch symbolische Links, denen ich folgen möchte (dh die -LOption von rsync ), und auf den Manpages scheint rdiff-backupdiese Option nicht verfügbar zu sein .

Irgendwelche anderen Vorschläge?

atorgovitsky
quelle
Zunächst einmal, warum können nicht formatieren Sie das USB - Laufwerk und warum haben Sie Dateinamen mit Doppelpunkten und Fragezeichen in ihnen? Obwohl diese Zeichen vom Dateisystem auf dem Quelllaufwerk zugelassen werden, sind sie für die Shell-Arbeit und die Portabilität problematisch. Außerdem ist rsyncdie --iconvOption nicht für das gemacht, wofür Sie sie verwenden möchten.
depquid
1
@depquid Es ist nur ein Problem für die Shell-Arbeit, wenn Sie fehlerhaften Shell-Code schreiben.
Jordanm
@jordanm Ich habe mehr über die Verwendung interaktiver Shell nachgedacht. Sicher, es kann getan werden, aber die Arbeit mit mehr Standardzeichen ist meiner Meinung nach bequemer.
depquid
1
Zu Ihrer Information, --iconvführt Zeichensatzkonvertierungen durch, z. B. latin1 <-> utf8. Nicht das, wonach du suchst.
Derobert
Ähnliche Frage zu Ask Ubuntu: Wie kann ich Doppelpunkte ersetzen, wenn ich auf einem USB-Stick synchronisiere?
Gilles 'SO - hör auf böse zu sein'

Antworten:

4

Rsync mit --iconvwäre eine Option, aber Sie würden müssen zuerst eine Codierung , wo definieren ?, :und andere sind mit Zeichen codiert , die auf FAT - Dateisystemen erlaubt sind.

Für Ihren Anwendungsfall nutzen Sie hierfür nicht die gesamte Leistung von rsync. Diese Aufgabe kann in wenigen Zeilen des Shell-Skripts ausgeführt werden.

Hier ist ein Bash - Skript , dass Kopien ~/Musicauf /media/usb99, Dateien überspringen die auf dem Ziel älter sind, und konvertiert :und ?zu _. Es werden keine Zusammenstöße erkannt (ich nehme an, Sie haben nicht beide foo:bar.mp3und 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

Dieses Skript funktioniert unter zsh mit geringfügigen Änderungen: shopt -s dotglob globstarnach setopt dot_globund [[ $target -ot $source ]]nach ersetzen [[ ! -e $target || $target -ot $source ]].

Gilles 'SO - hör auf böse zu sein'
quelle
2

Wenn es zu Sicherungszwecken dient, verstauen Sie einfach einen Tarball. Kein Dateiname ist so problematisch.

vonbrand
quelle
1
Klarstellung des Zwecks (gilt auch für die anderen Kommentare): Dies gilt für einen MP3-Player in einem Auto und die Software erlaubt nur FAT32. Es ist also nicht für Backup-Zwecke. Und die Gründe, warum die Dateinamen seltsame Zeichen haben, sind, dass es sich um Titel von MP3s oder Namen von Künstlern handelt.
Atorgovitsky
3
@atorgovitsky Sie sollten Ihre ursprüngliche Frage bearbeiten, um diese Details bereitzustellen.
depquid