Die Synchronisierung zwischen meinem Google Filestream, Google Drive und Synology CloudSync hat alles durcheinander gebracht und ich habe hunderte von doppelten Ordnern mit dem Ordnernamen, gefolgt von einem "(1)" oder "(2)" usw., übrig bis "(1) (1) (1)".
Kennen Sie ein Programm oder ein Skript, das diese Ordner zusammenführen kann?
Beispiel Ordnerstruktur auf oberster Ebene:
1100 Beetledwarf - Happy ATE
1100 Beetledwarf - Happy ATE (1)
1100 Beetledwarf - Happy ATE (2)
1100 Beetledwarf - Happy ATE (3)
1100 Beetledwarf - Happy ATE (3) (1)
1100 Beetledwarf - Happy ATE (3) (1) (1)
1100 Beetledwarf - Happy ATE (4)
1100 Beetledwarf - Happy ATE (5)
1100 Beetledwarf - Happy ATE (6)
Da Unterordner manchmal dasselbe Problem haben, müsste das Programm oder Skript Ordner mit diesem Benennungsmuster für alle Unterordner zusammenführen können. Beispiel:
Beispiel Ordner der zweiten Ebene:
1100 Beetledwarf - Happy ATE (6) Analysis Analysis (1) Smirckle_HL Smirckle_HL (2) Pending Reports Photos & Logos
Die beste Lösung würde es mir auch ermöglichen, Dateien zu verschieben, anstatt sie zu kopieren, da das Kopieren von Dateien sehr lange dauert, das Verschieben jedoch fast sofort erfolgt.
Liste der Dinge, die ich bereits ausprobiert habe, aber keine von ihnen kann mit der Ordnerstruktur "Name (1)" umgehen (die ich bisher feststellen kann), und alle kopieren Dateien, anstatt sie zu verschieben:
- WinMerge für Windows 10 & lt; - Drosseln beim Kopieren von Google-Laufwerksdateien (gibt etwas "DOS-Befehl nicht unterstützt" für sie zurück)
- Meld für MacOS. & lt; - langsam.
- Terminal mit "ditto" -Befehl in OS X & lt;
Danke für Ihre Hilfe!
Antworten:
Dies ist der Ansatz, den ich unter Linux versuchen würde. Ich habe keine Erfahrung mit Google Filestream, Google Drive oder Synology CloudSync. Daher kann ich nicht sagen, ob die Lösung überhaupt angewendet werden kann. Trotzdem hoffe ich, dass Ihnen das zumindest ein paar Ideen geben wird.
Annahmen
mv
.cp
und andere vernünftige Werkzeuge können mit Verzeichnissen so arbeiten, als wären sie lokal;(N)
Zeichenfolgen sind tatsächlich Instanzen derselben Datei (Verzeichnis).Verfahren
Bitte lesen Sie die gesamte Antwort, bevor Sie versuchen, etwas zu tun.
Ich denke, einige Schritte könnten als Skript geschrieben werden, aber da ist die Lösung sehr experimentell , es ist besser, es von Hand Schritt für Schritt zu machen und darauf zu achten, was passiert.
In einer Schale
cd
zum Mountpoint und rufen Sie auffind . | vidir -
; Verwenden Sie einen Texteditor Ihrer Wahl, z.kate
, so was:Dadurch wird der Editor mit einer Liste aller Objekte geöffnet, von denen jedes eine eigene Nummer hat. Wenn Sie den Inhalt ändern und die (temporäre) Datei speichern und den Editor schließen, werden alle Änderungen übernommen. Im Allgemeinen können Sie Folgendes tun:
Speichern Sie die Datei nur, wenn Sie sicher sind, dass der neue Inhalt die gewünschte Verzeichnisstruktur beschreibt.
Kopieren Sie den Inhalt aus dem Editor nach Ein weiterer Datei. Es geht darum, damit zu arbeiten und das Ergebnis erst dann wieder einzufügen (und zu speichern), wenn Sie sicher sind, dass Sie es richtig verstanden haben. Die nächsten Schritte beziehen sich auf die neue Datei, sofern nicht ausdrücklich etwas anderes angegeben ist.
Benutzen
sed
oder jedes andere Werkzeug, um alle loszuwerden(N)
Zeichenketten (beachten Sie das führende Leerzeichen). An diesem Punkt sollten Sie "saubere" Pfade erhalten, viele davon werden mehrmals vorkommen (mit unterschiedlichen Nummern, die durch angegeben werdenvidir
).Benutzen
sort -k 2
nach diesen Wegen sortieren. Dank an-s
das VorherigeAnalysis
sollte dem ersteren noch vorangehenAnalysis (1)
.Benutzen
uniq -f 1
doppelte Pfade löschen. Jetzt sollte jeder Pfad nur einmal vorkommen.Überprüfen Sie die Vernunft der im Ergebnis verschlüsselten Verzeichnisstruktur.
Fügen Sie das Ergebnis in den ursprünglichen Editor ein, speichern Sie die Datei und beenden Sie den Editor.
vidir
entfernt Objekte, die fehlenden Nummern zugeordnet sind, und Objekte, die verbleibenden Nummern zugeordnet sind.Testen
Ich würde zuerst verwenden diese Lösung replizieren Sie die Verzeichnisstruktur:
und testen Sie die Prozedur für die resultierenden leeren Dateien. Dies sollte Probleme aufdecken (falls vorhanden) und die Methode hoffentlich verbessern.
Mögliche Probleme
vidir
weigert sich, mit einigen nicht standardmäßigen Zeichen zu arbeiten.Im Allgemeinen ist die Reihenfolge der Objekte wichtig. Es gibt wenige Fallstricke, die Objekte erzeugen
foo~
oderfoo~1
.foo~2
wenn es eine Kollision mit gibtfoo
. Sie "verkleinern" Ihren Verzeichnisbaum auf eine Weise, die keine Kollisionen erzeugen sollte, dennoch habe ich nicht alle möglichen Szenarien untersucht. Ich denke wirklich, du solltest damit experimentieren/guinea_pig_dir/
und sehen, was Sie bekommen. Bei Problemen könnte sein ein klugersort
zwischenfind
undvidir
wird helfenquelle
Unten ist ein Bash-Skript, das diese Aufgabe ausführt. Es funktioniert z. MSYS2 Bash mit hinzugefügtem rsync. Es ist aus dieser verwandten Frage hier entnommen:
Skript zum Deduplizieren von Dateien und Ordnern mit einem bestimmten Suffix
quelle
cd
Dort.)