Ich habe eine Zip, die Dateien mit sehr langen Namen enthält.
Wenn ich versuche, in der Befehlszeile zu extrahieren, wird die Fehlermeldung "Dateiname zu lang" angezeigt.
Wenn ich den grafischen Archivmanager verwende, werden die Dateien nicht extrahiert und ich kann sie nicht umbenennen. Das gleiche Problem tritt auf, wenn ich das Archiv einbinde.
Ich kann Dateien einzeln extrahieren und umbenennen, indem ich:
unzip -p -c example.zip "long file name.ogg" > shortname.ogg
Dies ist bei vielen Dateien unpraktisch.
Gibt es ein Tool, mit dem Dateinamen beim Extrahieren abgeschnitten werden?
unzip -l <ARCHIVE>
und wie sollen die Namen abgeschnitten werden? Möchten Sie die Verzeichnisstruktur während des Extrahierens im Archiv beibehalten?Antworten:
Extrahieren
Wir können
zipinfo
als Teil dieses Prozesses ein Programm aus demzip
Paket verwenden.zeigt nur die Dateinamen in
example.zip
, so sieht es aus:Mit dieser Funktion können wir alle Dateien extrahieren:
long_fname=${i%.*}
: Entfernt die Erweiterung aus dem langen Dateinamen, sodass der Dateiname weniger als 256 Zeichen beträgt. Wir werden keine doppelte Erweiterung erhalten.${long_fname:0:250}.${i##*.}
: Erstellt einen neuen Dateinamen mit einer legitimen Anzahl von Zeichen und fügt eine.
echte Dateierweiterung hinzu .Wir führen einfach eine Schleife in die Dateiliste und extrahieren jede mit einem neuen legitimen Dateinamen, der 256 Zeichen umfasst.
Umbenennen
Sie können den
zipnote
Befehl verwenden, er ist auch Teil deszip
Pakets.Holen Sie sich zuerst ein Backup Ihrer Zip-Datei.
Führen Sie diesen Befehl aus:
Öffnen Sie Namen mit einem Editor. Sie sehen folgendermaßen aus:
Fügen Sie neue Dateinamen wie folgt hinzu:
Um Dateien umzubenennen, verwenden Sie:
Sie haben sie alle umbenannt. Sie können auch ein einfaches Skript schreiben, das dies automatisch für Sie erledigt.
quelle
IFS= read -r i
wenn die Dateinamen mit Leerzeichen beginnen oder Dinge enthalten, die die Shell möglicherweise als Escape-Sequenzen interpretiert.