Skip to content

Commit 063798b

Browse files
authored
Add files via upload
1 parent 33855a8 commit 063798b

File tree

1 file changed

+117
-0
lines changed

1 file changed

+117
-0
lines changed

SameFile.sh

Lines changed: 117 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,117 @@
1+
#!/bin/bash
2+
3+
init () {
4+
local SUGGEST_USAGE
5+
SUGGEST_USAGE="Type \"./SameFile.sh --help\" to see usage"
6+
if [ "$1" == "--help" ]; then
7+
usage
8+
exit 0
9+
fi
10+
if [ "$1" == "" ]; then
11+
echo "SameFile: error: directory not specified"
12+
echo "$SUGGEST_USAGE"
13+
exit 1
14+
fi
15+
if [ ! -d "$1" ]; then
16+
echo "SameFile: error: \"$1\" - no such directory"
17+
echo "$SUGGEST_USAGE"
18+
exit 1
19+
fi
20+
if [ "$2" == "" ]; then
21+
echo "SameFile: error: output file not specified"
22+
echo "$SUGGEST_USAGE"
23+
exit 1
24+
fi
25+
trap interrupt SIGINT
26+
stty -echoctl
27+
tabs 4
28+
count "$1"
29+
confirm
30+
calc "$1"
31+
dupl "$2"
32+
exit 0
33+
}
34+
35+
usage () {
36+
echo "SameFile v1.0 by MasterDevX"
37+
echo "Made in Ukraine"
38+
echo
39+
echo "Usage:"
40+
echo './SameFile.sh <path> <output>'
41+
echo
42+
echo "path - Derectory to analyze."
43+
echo "output - Output file with results."
44+
}
45+
46+
interrupt () {
47+
echo
48+
echo "Cancelled."
49+
exit 1
50+
}
51+
52+
count () {
53+
echo "Counting files in \"$1\"..."
54+
FILE_COUNT=$(find "$1" -type f | wc -l)
55+
if [ $FILE_COUNT -eq 0 ]; then
56+
echo "No files found."
57+
exit 0
58+
fi
59+
echo "Files found: $FILE_COUNT"
60+
}
61+
62+
confirm () {
63+
local CONFIRM
64+
echo
65+
read -p "Proceed? [ y / N ] " CONFIRM
66+
if [ "${CONFIRM,,}" != "y" ]; then
67+
echo
68+
echo "Aborted."
69+
exit 1
70+
fi
71+
}
72+
73+
calc () {
74+
local COUNTER FILE_NAME
75+
COUNTER=0
76+
MD5_LIST=""
77+
echo
78+
while read FILE_NAME; do
79+
COUNTER=$(($COUNTER + 1))
80+
echo -ne "Calculating MD5... [ done: $COUNTER / $FILE_COUNT ]\r"
81+
MD5_LIST="$MD5_LIST$(md5sum "$FILE_NAME")\n"
82+
done < <(find "$1" -type f)
83+
}
84+
85+
dupl () {
86+
local COUNTER MD5_SUM MD5_FILE FILE_SIZE STATUS_LINE
87+
COUNTER=0
88+
STATUS_LINE="Checking for duplicates..."
89+
echo
90+
echo -ne "$STATUS_LINE\r"
91+
if [ -f "$1" ]; then
92+
rm "$1"
93+
fi
94+
MD5_LIST="${MD5_LIST::-2}"
95+
while read MD5_SUM; do
96+
FILE_SIZE=""
97+
COUNTER=$(($COUNTER + 1))
98+
echo -ne "$STATUS_LINE [ found: $COUNTER ]\r"
99+
echo -n "$COUNTER. $MD5_SUM " >> "$1"
100+
while read MD5_FILE; do
101+
if [ "$FILE_SIZE" == "" ]; then
102+
FILE_SIZE="$(du -h "$MD5_FILE" | cut -f 1)"
103+
echo "[ $FILE_SIZE ]" >> "$1"
104+
fi
105+
echo -e "\t$MD5_FILE" >> "$1"
106+
done < <(echo -e "$MD5_LIST" | grep "^$MD5_SUM" | cut -d ' ' -f 3-)
107+
echo >> "$1"
108+
done < <(echo -e "$MD5_LIST" | cut -d ' ' -f 1 | sort | uniq -d)
109+
echo
110+
if [ ! -f "$1" ]; then
111+
echo "No duplicates found."
112+
exit 0
113+
fi
114+
echo "Results written to \"$1\"!"
115+
}
116+
117+
init "$@"

0 commit comments

Comments
 (0)