Dateiduplikate anhand des Namens und der Größe finden

Datum: 2004-10-12
Quelle: suse-linux

Worum ging es?

In einem Verzeichnisbaum sollen alle identischen Dateien (also Dateien mit gleicher Größe und gleichem Namen) ermittelt werden.

Code
find /basis -type f -printf "%f %s %h\n" | sort | \
awk ' BEGIN { prev_sz = 0; prev_name = ""; p_name = ""; }
      { if ( prev_sz == $2 && prev_name == $1 ) {
          p_names = sprintf ("%s, %s", p_names, $3);
          found=1;
        }
        else {
          if (found == 1)
            printf "%s %d %s\n", prev_name, prev_sz, p_names;
          prev_sz = $2;
          found=0;
          prev_name = $1;
          p_names = $3;
        }
      } '
Beschreibung

Der (GNU)-find liefert eine Dateiliste im Format "Dateiname Größe Pfad", diese Liste wird sortiert einem awk übergeben. Dieser gibt immer dann die Zeile aus, wenn Name und Größe identisch zum Vorgänger sind.