Wenn ich Dateien von einer ext3-Partition mit cp auf eine fat32-Partition kopiere:
cp -R /ext3/stuff /fat32/partition/
Ich erhalte ungültige Argumentmeldungen für alle Dateien mit Doppelpunkten und Fragezeichen.
Gibt es eine Möglichkeit, cp dazu zu bringen, die ungültigen Zeichen für das Zieldateisystem zu entfernen?
edit: Ich habe noch einmal die Optionen von cp durchgesehen, und wenn ich nicht dumm bin, ist nichts drin. Ich bin mir sicher, dass ich ein Skript schreiben könnte, aber es scheint, dass es eine sauberere Lösung geben sollte!
quelle
Basierend auf einem Beitrag von Gilles habe ich folgende Liste getestet:
Ich habe versucht, das auf Android-Handy MicroSDHC-Karte mit VFAT-Dateisystem zu kopieren und
pax
Befehl verfeinert, bis alles funktioniert. Für Windows und Unicode reicht das möglicherweise noch nicht aus:Möglicherweise möchten Sie auch die Option -k verwenden, um sicherzustellen, dass keine Überschreibungen vorhanden sind (aufgrund von Kollisionen in den Dateinamen). Beide Listen, die ich im Kommentar angegeben habe, unterscheiden sich vom Verhalten von Linux vfat.
quelle
Beim Kopieren mit cp -r source usbstick erhielt ich das Argument "Ungültig" und stellte fest, dass die Ursache ein Quellendateiname ist, der mit einem Leerzeichen endet. Durch Entfernen des Leerzeichens wurde die Nachricht gelöscht. Die Datei mit falschem Namen befand sich in diesem Fall übrigens in Mailer-Programmverzeichnissen.
quelle
Ich hatte gerade Grund, dies zu tun, und obwohl die
pax
Antwort gut war, stieß sie immer noch auf Probleme mit Zeichen mit Akzenten.Daher fand ich es einfacher,
tar
alle nicht zulässigen Zeichen durch Unterstriche zu ersetzen:Es ist zweifellos möglich, eine bessere Liste der zulässigen Zeichen als die oben angegebene zu erstellen, aber das funktioniert.
quelle
Nachdem ich die Antworten auf diese sehr interessante Frage gelesen und mit SD-Karten für Android (exfat) und einem Auto-Unterhaltungssystem (vfat) experimentiert hatte, kam ich zu diesem kleinen Bash-Skript.
Es nimmt das Ziel (Mount-Punkt) als Argument und verwendet es
find
, um alle Dateien in meinem Musik-Repository zu lokalisieren.Für jeden Dateipfad werden ein Zielpfad und ein Dateiname berechnet, indem das Ziel vorangestellt wird und jedes fehlerhafte Zeichen durch einen Unterstrich ersetzt wird
_
. Ich benutze eine weiße Liste von Zeichen (Buchstaben, Ziffern,-
,/
,.
,.
(
,)
Und_
) jede unerwünschte Zeichensetzung zu entfernen.Abhängig vom Gebietsschema verbleiben akzentuierte Buchstaben im Pfad und im Dateinamen, was für moderne FAT-Dateisysteme anscheinend in Ordnung ist.
Für jeden Zieldateipfad und -namen werden die Verzeichnisse nach Bedarf mit erstellt
mkdir -p
. Anschließend wird die Datei kopiert, sofern sie nicht bereits vorhanden ist.Beachten Sie die Anführungszeichen
"
an verschiedenen Stellen, damit Pfade und Namen mit Leerzeichen nicht auseinander brechen.quelle