Eine verpfuschte OneDrive-Wiederherstellung hat mir viele Dateien und Ordner mit dem Suffix "(1)" oder "(2)" hinterlassen.
Ich hätte gerne ein Skript (Bash ist in Ordnung, da ich MinGW + Cygwin oder PowerShell habe), das alle Dateien und Ordner in einem bestimmten Ordner (z. B. "d: \ OneDrive" oder "/ cygdrive / d / OneDrive") und für analysiert Überprüfen Sie für jede Datei oder jeden Ordner, ob sich eine oder mehrere Dateien / Ordner (im selben Unterordner) befinden, deren Datei- / Ordnername mit dem regulären Ausdruck "\ 1 \ s * \ (\ d + \) \. \ 2" mit "\ 1" übereinstimmt "ist der ursprüngliche Datei- / Ordnername ohne Erweiterung und \ 2 ist die ursprüngliche Erweiterung. Dann sollte das Skript die ursprüngliche Datei / den ursprünglichen Ordner mit allen Dateien / Ordnern vergleichen, die von der vorherigen Regex gefunden wurden (im letzteren Fall rekursiv), und falls sie identisch sind, sollte es die Kopie löschen (die mit dem längeren Dateinamen).
Während eine mögliche Grundstruktur des Skripts klar ist (zwei verschachtelte für Schleifen, Suchen zum Finden von Dateien, die der regulären Ausdrücke entsprechen, Diff zum Vergleich usw.), kenne ich mich mit Bash-Skripten nicht aus, um die Teile bequem zusammenzusetzen, und es kann gut sein in jedem Fall eine effizientere Struktur sein (was angesichts der Tatsache, dass etwa eine halbe Million Dateien zu durchlaufen sind, hilfreich wäre).
Get-FileHash
und eine Gruppe nach Hashes zu erstellen, wobei der kürzeste Name beibehalten wird - der andere wird verworfen.Antworten:
Hier ist ein Skript, das funktioniert und einigermaßen effizient ist. Beachten Sie, dass genau ein Leerzeichen vor dem "(1)" und keines nach dem "(1)" eingefügt werden muss, damit es funktioniert.
quelle