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, cp
oder 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:
--iconv
Option von rsync . Das schien nicht zu funktionieren, aber vielleicht habe ich es nicht richtig benutzt.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-L
Option von rsync ), und auf den Manpages scheintrdiff-backup
diese Option nicht verfügbar zu sein .
Irgendwelche anderen Vorschläge?
rsync
die--iconv
Option nicht für das gemacht, wofür Sie sie verwenden möchten.--iconv
führt Zeichensatzkonvertierungen durch, z. B. latin1 <-> utf8. Nicht das, wonach du suchst.Antworten:
Rsync mit
--iconv
wä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
~/Music
auf/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 beidefoo:bar.mp3
undfoo?bar.mp3
).Dieses Skript funktioniert unter zsh mit geringfügigen Änderungen:
shopt -s dotglob globstar
nachsetopt dot_glob
und[[ $target -ot $source ]]
nach ersetzen[[ ! -e $target || $target -ot $source ]]
.quelle
Wenn es zu Sicherungszwecken dient, verstauen Sie einfach einen Tarball. Kein Dateiname ist so problematisch.
quelle