#!/bin/bash # Example usage, find all doubles in all sub directory # for i in *; do if [ -d $i ]; then double.sh $i; fi; done # # To find duplicates in specific directory # double.sh /path/to/dir /path/to/other/dir ./relativ/path # # With zero paramater, the script uses the working diroctory. DATABASE="/tmp/double.db" DIR="./found_doubles" COUNT=0 if [ $# -eq 0 ]; then LOOP=false else LOOP=true fi echo "" while true; do if [ $LOOP = true ]; then if [ ! -d "$1" ]; then echo "Can't chdir to $1." exit 1 else echo "Changing directory to '$1'." cd "$1" shift fi else echo "Working in directory '$(pwd)'." fi sqlite3 $DATABASE "CREATE TABLE files (hash TEXT UNIQUE)" mkdir -p $DIR TMP=0 for i in *; do if [ -f "$i" ]; then HASH=$(md5sum "$i" | awk '{ print $1 }') sqlite3 $DATABASE "INSERT INTO files VALUES ('$HASH')" 2>/dev/null if [ ! $? -eq 0 ]; then mv -v "$i" "$DIR" ((COUNT ++)) ((TMP ++)) fi fi done if [ $TMP -eq 0 ]; then rmdir $DIR fi if [ $LOOP = true ]; then sqlite3 $DATABASE "DROP TABLE files" echo "" else break fi if [ $# -eq 0 ]; then break; fi done echo "Found and moved $COUNT files to $DIR." rm -f $DATABASE