diff options
| author | Horus3 | 2014-05-04 23:36:14 +0200 |
|---|---|---|
| committer | Horus3 | 2014-05-04 23:36:14 +0200 |
| commit | 5cc26b20de7b64faf010f389f297777a365f557b (patch) | |
| tree | a7356865e06057f78bd47f3df4ad779528c89614 /bin/duplicate.sh | |
| parent | f060617d9a33f5a75259edda6c22574a8d8d9df9 (diff) | |
| download | dotfiles-5cc26b20de7b64faf010f389f297777a365f557b.tar.gz | |
Used to find the filesize of all duplicates found with duplicate.sh.
Diffstat (limited to 'bin/duplicate.sh')
| -rwxr-xr-x | bin/duplicate.sh | 70 |
1 files changed, 70 insertions, 0 deletions
diff --git a/bin/duplicate.sh b/bin/duplicate.sh new file mode 100755 index 0000000..655aff2 --- /dev/null +++ b/bin/duplicate.sh @@ -0,0 +1,70 @@ +#!/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 |
