Entfernen von doppelten Dateien mit Powershell
Habe ich mehrere tausend doppelte Dateien (jar-Dateien als Beispiel), würde ich gerne mit powershell
- Suche durch das Dateisystem rekursiv
- Finden, der dups (entweder nur name oder ein Prüfsummen-Methode oder beide)
- Löschen Sie alle Duplikate bis auf einen.
Ich bin neu in der powershell und bin wirft diese gibt, um die PS-Leute, die möglicherweise in der Lage zu helfen.
Du musst angemeldet sein, um einen Kommentar abzugeben.
versuchen Sie dies:
aus: http://n3wjack.net/2015/04/06/find-and-delete-duplicate-files-with-just-powershell/
Halten Sie ein Wörterbuch der Dateien, die Sie löschen, wenn die nächste Datei name wurde bereits festgestellt vor:
Ich verwendete Datei-name als key, aber Sie können eine Prüfsumme verwenden, wenn Sie möchten (oder beides) - siehe code-Kommentar.
-contains
prüfen, würde ausreichen. Keine Notwendigkeit für ein Wörterbuch.0
als dummy-Wert zu belegen Speicher mit Müll. Logisch, es ist äquivalent zu einem hashset (ein .NET-Objekt). Wenn Sie möchten, einfach entfernen Sie alle Duplikate, entfernen Sie die Kommentarzeichen meine Linie mitRemove-Item
. Fragezeichen am Ende ist nicht erforderlich. Es ist eine Art von "willst du" Remove-Item "ist für eine doppelte", oder nehmen Sie eine andere Aktion?$_.Name
ist nicht ein guter Wert für einen Schlüssel, wenn wir reden Ordner.$_.FullName
wird bevorzugt, das macht Sinn, dass ist eine Möglichkeit. Irgendwelche Gedanken auf, warum es entfernt alle dups und nicht verlassen? Ich bin das kopieren von Sachen wieder einmal zu versuchen, nur dieses mal mit-WhatIf
-Recurse
aufRemove-Item
? Weil Sie nicht wollen, zu. Andere als die, es ist schwer zu sagen, ohne zu wissen, Ihre Ordner-Struktur. Versuchen Sie es zum reproduzieren auf eine kleine Anzahl von Dateien und sehen Sie, warum es passiert.-Recurse
problem ist, wenn ich nicht (und ich weiß, ich will nicht jetzt), bekomme ich die BESTÄTIGUNG-dialog gefragt, mich zu wählen: ja / ja Alle / Nein / Nein Alle / Suspend. Nicht, dass jedes popup. Gibt es eine Standard - Nicht Alle kann ich in so die es ausführt, dass der Betrieb ohne Interaktion?-Confirm
parameter. Siehe das. Sie können versuchen-Force
, zu sehen, ob es hilft.-Force
immer noch das bestätigen, dialog, sowie mitGet-ChildItem
und RohrleitungenRemove-Item
:get-childitem -Path $_.FullName | Remove-Item -Force -WhatIf
ich bin erforschen, wie die Antwort Nicht Alle und bekommen die Bestätigung-popup-dialog jetzt. Nochmals vielen Dank für Ihre Hilfe bei diesem. Ich bin mit der Powershell v2.0. Wenn ich die Antwort Nicht Alle es erscheint dann die Dateien zu löschen und keine Verzeichnisse.-Force
sollte gearbeitet haben, Nicht Alle. Siehe diese Frage. Weitere Informationen auf der MSDN-Website.Obwohl die Frage schon alt ist, ich habe in einem Aufräumen müssen alle doppelten Dateien basierend auf dem Inhalt. Die Idee ist einfach, der Algorithmus dafür ist nicht einfach. Hier ist der code, der akzeptiert einen parameter "Pfad" Duplikate entfernen aus.
Skript
a) Listet alle ChildItems
b) Ruft FileHash von Ihnen
c) Gruppen, die Sie durch die Hash-Eigenschaft (also alle die gleichen Dateien sind in der single-Gruppe)
d) Filtert bereits-einzigartig-Dateien (Anzahl der Gruppe -eq 1)
e) durchläuft jede Gruppe und listet alle aber der Letzte Weg - die Gewährleistung einer Datei jeder "Hash" bleibt immer
f) Warnt vor der vorhergehenden, zu sagen, wie viele Dateien sind es insgesamt und wie viele gelöscht werden.
Wahrscheinlich nicht die meisten performance-wise option (SHA1-ing jeder Datei) stellt aber sicher, dass die Datei ein Duplikat ist.
Funktioniert für mich vollkommen in Ordnung 🙂
Statt nur entfernen Sie Ihre Duplikate-Dateien, können Sie Sie ersetzen durch eine Verknüpfung