Ich habe Musik im Wert von GB auf meiner Festplatte, die mit EXT4 formatiert wurde. Ich möchte diese Dateien auf eine FAT-formatierte Festplattenpartition verschieben. Ich kann jedoch die meisten meiner Dateien nicht verschieben, da die Namen ":" enthalten (z. B. "Akt 2: ....." für Opern). Gibt es eine Möglichkeit mit der Befehlszeile, alle meine Dateien von "XXXX: XXXX" in "XXXX-XXXX" umzubenennen?
quelle
find .
Namens eines Unterverzeichnisses dessen Inhalt vorangestellt ist. Also , wenn Sie eine Datei/1:/2:
zuerst/1:/
wird umbenannt/1-/
. Jetzt können Sie nicht umbenennen/1:/2:
,/1-/2-
da/1:/2:
es nicht existiert.find . -type d -readable -writable -exec rename 's|:|-|g' {} \;
Und dann Dateien:find . -type f -readable -writable -exec rename 's|:|-|g' {} \;
for i in {1..20}; do find . -maxdepth $i -mindepth $i -name "*:*" -exec rename 's|:|-|g' {} \;; done
. Ändern Sie 20 auf die maximale Tiefe des Verzeichnisses. Struktur. Muss nicht genau sein - kann größer sein. Wird einige Zeit dauern, wenn eine sehr große Anzahl eingestellt ist.Ich bin gerade nicht auf meinem Linux-Rechner, daher kann ich nur grobe Informationen geben.
Linux verfügt über ein Befehlszeilenprogramm,
rename
das unter anderem mit Eingaben, regulären Ausdrücken oder regulären Ausdrücken funktioniert. Sie sollten dies zusammen mit einem regulären Ausdruck wie "s /: / - /" für Ihre Dateien verwenden können, um die gewünschte Umbenennung zu erreichen.Um sicher zu gehen, machen Sie es in kleinen Stapeln und / oder testen Sie es zuerst mit der Simulation (Umbenennen hat ein Flag, das Ihnen nur den alten und den neuen Namen der Datei gibt, ohne sie tatsächlich umzubenennen - verwenden Sie dies, um dies zuerst zu überprüfen).
quelle
Dies ist eine Lösung in Python, die den Fall behandelt, dass sich die Dateien nicht unbedingt im selben Verzeichnis befinden.
rootdir
in das äußerste betrachtete Verzeichnis (Verwenden Sie den vollständigen Pfadnamen beginnend mit /. Keine Kurz- oder Umgebungsvariablen wie ~ erlaubt). Sie müssen \ nicht vor Sonderzeichen setzen - zum Beispiel, wenn das äußerste Verzeichnis /.../Meine Festplatte ist, setzen Sierootdir = "/.../My HDD"
NOTrootdir = "/.../My\ HDD"
(Beachten Sie die "s) [Ich bin dies nur explizit, weil Sie mit Python möglicherweise nicht vertraut sind. Keine Respektlosigkeit beabsichtigt.]logfile
zum gewünschten Speicherort der Protokolldatei. Am Ende enthält diese Datei die Liste der umbenannten Dateien - zum späteren Nachschlagen.python rename.py
.Warnung: Testen Sie eine kleine Probe, bevor Sie ein ganzes GB Musik riskieren.
Details: Das Umbenennen erfolgt von den innersten Dateien nach außen.
quelle
Mir ist klar, dass dies ein sehr alter Beitrag ist. Die rekursive Lösung von AeroGT80 ist sehr gründlich, aber ziemlich langsam. Ich hatte es ungefähr eine halbe Stunde lang auf einem langsameren Server laufen lassen und es wurde nur ungefähr die Hälfte erledigt - ich denke, es waren ungefähr 73.000 Dateien in ungefähr 300 Unterverzeichnissen.
Die folgende Lösung funktioniert viel schneller (sie verarbeitet alle Dateien in einem Verzeichnis anstelle jeder Datei einzeln - unter Verwendung der nicht rekursiven Lösung von AeroGT80). Das einzige Problem ist, dass es nur ein Verzeichnis tief ist (es ist also nicht vollständig rekursiv wie seine Lösung), aber ich bin sicher, dass es leicht genug geändert werden kann.
quelle