Finden und entfernen von doppelten Dateien in osx mit einem Skript

) Von http://www.chriswrites.com/2012/02/how-to-find-and-delete-duplicate-files-in-mac-os-x/ Wie ändere ich dies, um nur die erste Version der angezeigten Datei zu löschen?

Terminal aus Spotlight oder dem Ordner Utilities öffnen Wechseln Sie mit dem Befehl cd in das Verzeichnis (Ordner), in dem Sie suchen möchten (einschließlich Unterordnern). Geben Sie an der Eingabeaufforderung cd ein, z. B. cd ~ / Documents, um das Verzeichnis in Ihren home Documents-Ordner zu ändern Auf Befehl prompt, geben Sie den folgenden Befehl:

find . -size 20 \! -type d -exec cksum {} \; | sort | tee /tmp/f.tmp | cut -f 1,2 -d ' ' | uniq -d | grep -hif – /tmp/f.tmp > duplicates.txt

Diese Methode verwendet eine einfache Prüfsumme, um festzustellen, ob Dateien identisch sind. Die Namen von doppelten Elementen werden in einer Datei mit dem Namen Duplikate aufgeführt.txt im aktuellen Verzeichnis. Öffnen Sie dies, um die Namen identischer Dateien anzuzeigen Es gibt nun verschiedene Möglichkeiten, die Duplikate zu löschen. Um alle Dateien in der Textdatei zu löschen, geben Sie an der Eingabeaufforderung Folgendes ein:

while read file; do rm "$file"; done < duplicates.txt
 14
Author: Daniel Beck, 2012-09-30

4 answers

Zunächst müssen Sie die erste Befehlszeile neu anordnen, damit die Reihenfolge der mit dem Befehl find gefundenen Dateien beibehalten wird:

find . -size 20 ! -type d -exec cksum {} \; | tee /tmp/f.tmp | cut -f 1,2 -d ‘ ‘ | sort | uniq -d | grep -hif – /tmp/f.tmp > duplicates.txt

(Hinweis: Zu Testzwecken habe ich in meiner Maschine find . -type f -exec cksum {} \; verwendet)

Zweitens ist eine Möglichkeit, alle außer dem ersten Duplikat zu drucken, die Verwendung einer Hilfsdatei, sagen wir /tmp/f2.tmp. Dann könnten wir etwas tun wie:

while read line; do
    checksum=$(echo "$line" | cut -f 1,2 -d' ')
    file=$(echo "$line" | cut -f 3 -d' ')

    if grep "$checksum" /tmp/f2.tmp > /dev/null; then
        # /tmp/f2.tmp already contains the checksum
        # print the file name
        # (printf is safer than echo, when for example "$file" starts with "-")
        printf %s\\n "$file"
    else
        echo "$checksum" >> /tmp/f2.tmp
    fi
done < duplicates.txt

Stellen Sie einfach sicher, dass /tmp/f2.tmp existiert und leer ist, bevor Sie dies ausführen, z. B. über die folgenden Befehle:

rm /tmp/f2.tmp
touch /tmp/f2.tmp

Hoffnung das hilft =)

 4
Author: Janito Vaqueiro Ferreira Filho,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/techietown.info/template/agent.layouts/content.php on line 61
2012-09-30 13:42:18

Eine andere Option ist die Verwendung von fdupes:

brew install fdupes
fdupes -r .

fdupes -r . findet rekursiv doppelte Dateien im aktuellen Verzeichnis. Add -d löschen der Duplikate - Sie werden aufgefordert, die Dateien zu halten; wenn Sie stattdessen hinzufügen -dN, fdupes wird immer die erste Datei und löschen Sie andere Dateien.

 47
Author: Lri,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/techietown.info/template/agent.layouts/content.php on line 61
2015-12-18 15:19:42

Ich habe ein Skript geschrieben, das Ihre Dateien so umbenennt, dass sie mit einem Hash ihres Inhalts übereinstimmen.

Es verwendet eine Teilmenge der Bytes der Datei, so dass es schnell ist, und wenn es eine Kollision gibt, hängt es einen Zähler an den Namen wie folgt an:

3101ace8db9f.jpg
3101ace8db9f (1).jpg
3101ace8db9f (2).jpg

Dies macht es einfach, Duplikate selbst zu überprüfen und zu löschen, ohne der Software eines anderen mit Ihren Fotos mehr zu vertrauen, als Sie benötigen zu.

- Skript: https://gist.github.com/SimplGy/75bb4fd26a12d4f16da6df1c4e506562

geben Sie hier die Bildbeschreibung ein

 3
Author: SimplGy,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/techietown.info/template/agent.layouts/content.php on line 61
2016-11-27 00:42:58

Dies geschieht mit Hilfe von EagleFiler-app, entwickelt von Michael Tsai.

tell application "EagleFiler"

      set _checksums to {}
      set _recordsSeen to {}
      set _records to selected records of browser window 1
      set _trash to trash of document of browser window 1
      repeat with _record in _records
          set _checksum to _record's checksum
          set _matches to my findMatch(_checksum, _checksums, _recordsSeen)
          if _matches is {} then
              set _checksums to {_checksum} & _checksums
              set _recordsSeen to {_record} & _recordsSeen
          else
              set _otherRecord to item 1 of _matches
              if _otherRecord's modification date > _record's modification date 
then

            set _record's container to _trash
            else
                set _otherRecord's container to _trash
                set _checksums to {_checksum} & _checksums
                set _recordsSeen to {_record} & _recordsSeen
            end if
        end if
    end repeat
end tell

on findMatch(_checksum, _checksums, _recordsSeen)

    tell application "EagleFiler"
        if _checksum is "" then return {}
        if _checksums contains _checksum then
            repeat with i from 1 to length of _checksums
                if item i of _checksums is _checksum then
                    return item i of _recordsSeen
                end if
            end repeat
        end if
        return {}
    end tell

end findMatch

Sie können Duplikate auch automatisch mit duplicate file Remover löschen vorgeschlagen in dieser Beitrag.

 0
Author: Dejise,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/techietown.info/template/agent.layouts/content.php on line 61
2018-11-13 09:13:28