Wie finde ich Dateien, die Duplikate von Dateien in einem bestimmten Ordner sind?

361
cezieu

Ich muss die Duplikate auf meinem Computer entfernen, da ich ungefähr 5 Kopien jedes einzelnen Fotos in verschiedenen Ordnern habe. Ich möchte die Fotos löschen, die auch in einem bestimmten Ordner angezeigt werden. Dabei habe ich einige davon sortiert. Ich möchte, dass die Dateien im Ordner bleiben, und auch Duplikate, die nicht in diesem Ordner angezeigt werden. Ex: Ich möchte die Dateien auf dem Desktop behalten.

  • C: / Desktop / Datei1, Datei3
  • C: / Desktop / 2016 / file2
  • C: / Backup / Datei1 (2), Datei4
  • C: / Backup2 / Datei1 (3), Datei2 (2), Datei4 (2)

Das Ergebnis sollte sein

  • C: / Desktop / Datei1, Datei3
  • C: / Desktop / 2016 / file2
  • C: / Backup / file4
  • C: / Backup2 / file4 (2)
0
Was hast du schon probiert? slhck vor 6 Jahren 0
CCleaner-Duplikatsucher cezieu vor 6 Jahren 0

1 Antwort auf die Frage

0
simlev

Angenommen dir1, es ist der Pfad, den Sie durchsuchen möchten, und dir2der bestimmte Ordner :

find dir1 -not -path "dir2/*" | grep -F -f <(ls -1 dir2) | parallel rm 

oder wenn Sie nur haben xargsund nicht parallel:

find dir1 -not -path "dir2/*" | grep -F -f <(ls -1 dir2) | xargs rm 

Beispiel:

Nehmen wir an, Sie möchten in das C:Laufwerk schauen und der bestimmte Ordner ist C:\Desktopdann auf cygwin :

find /cygdrive/c -not -path "/cygdrive/c/Desktop/*" | grep -F -f <(ls -1 /cygdrive/c/Desktop) | parallel rm 

auf Git für Windows :

find /c -not -path "/c/Desktop/*" | grep -F -f <(ls -1 /c/Desktop) | parallel rm 

in der WSL :

find /mnt/c -not -path "/mnt/c/Desktop/*" | grep -F -f <(ls -1 /mnt/c/Desktop) | parallel rm 
Funktionierte nicht wie erwartet ... (wahrscheinlich bin ich hier schuld). Ich habe cygwin und $ find / cygdrive / c / dedup -not -path "/ cygdrive / c / dedup / test / *" -delete | verwendet grep -F -f <(ls -1 / cygdrive / c / dedup / test) und löschte alle Dateien außer den Dateien in / test (der "bestimmte Ordner") cezieu vor 6 Jahren 1
Nein, ich habe einen Fehler gemacht, als ich die Option -delete vor 'grep' gesetzt habe: Auf diese Weise werden alle gefundenen Dateien gelöscht *, bevor * der Filter angewendet wird! Es hätte `find dir1 -not -path" dir2 / * "| sein sollen grep -F -f <(ls -1 dir2) | parallel rm {} `. simlev vor 6 Jahren 0
Oh, jetzt teste ich es cezieu vor 6 Jahren 0
Hatte einige Probleme bei der Installation von Parallel und was auch immer sonst nötig war, aber jetzt funktioniert es: 3! Danke vielmals ! cezieu vor 6 Jahren 0
@cezieu Tut mir leid, dass ich zuerst eine gefährliche Antwort gepostet habe, gut, dass Sie es getestet haben. "parallel" macht dasselbe wie "xargs", das normalerweise standardmäßig verfügbar ist. Sie sollten sich also nicht die Mühe machen. simlev vor 6 Jahren 0