#!/bin/sh # \ exec tclsh "$0" ${1+"$@"} proc FindFiles {dir} { global argv0 files if { [catch {glob $dir/* $dir/.*} ents] } { return } foreach ent $ents { if { [file tail $ent] == "." || [file tail $ent] == ".." } { continue } if { [file isdirectory $ent] } { FindFiles $ent } else { lappend files $ent } } return } if { $argc != 1 } { puts "Usage: $argv0 " exit 1 } set files "" FindFiles [lindex $argv 0] set orig_list $files foreach file "$files" { if { [catch { file size $file } size($file)] } { puts stderr "$file does not exist (sym link to nothing?)" } if { $size($file) == 0 } { puts "$file is zero bytes!" } } set cnt 0 foreach file "$orig_list" { if { $cnt == 75 } { puts -nonewline "." flush stdout set cnt 0 } incr cnt foreach tst_f $files { if { $size($tst_f) != $size($file) } { continue } if { $tst_f == $file || $size($file) == 0 } { continue } catch {eval exec diff -s $file $tst_f} output if { [regexp "identical" $output m] == 1 } { puts stderr "$file == $tst_f (size: $size($file))" if { [regexp {20\d\d\d\d\d\d[_-]} $file] } { puts "based on name, I would keep file: $file and delete: $tst_f" exec rm $tst_f } elseif { [regexp {20\d\d\d\d\d\d[_-]} $tst_f] } { puts "based on name, I would keep tst_f: $tst_f and delete: $file" exec rm $file } } } # only check remainder of files (e.g. lindex 0 was just compared) set files [lrange $files 1 end] }