CaseFix.sh
Jump to navigation
Jump to search
#!/bin/sh
# Init
cachePath=/tmp/duples$$
# store paths
find * ./.[^.]* ./..?* -xdev ! -type l |gzip >"${cachePath}".in.gz
# Convert lower case
zcat "${cachePath}".in.gz |tr '[:upper:]' '[:lower:]' >"${cachePath}".out2
mv -f "${cachePath}".out2 "${cachePath}".in2
# Get duples
inFile="${cachePath}".in2
outFile="${cachePath}".out2
triggerValue=1
awk 'NR == FNR {count[$0]++; next}; count[$0] > '"${triggerValue}" "${inFile}" "${inFile}" \
| awk '!seen[$0]++' |tee "${outFile}"
mv -f "${cachePath}".out2 "${cachePath}".in2
# get original duplicates, new in
zgrep -xi -f "${cachePath}".in2 "${cachePath}".in.gz >"${cachePath}".out2
rm -f "${cachePath}".in.gz
mv -f "${cachePath}".out2 "${cachePath}".in
# fix
cat "${cachePath}".in2 |while read lineMy ;do
filePath=""
dirPath=""
zgrep -xi "${lineMy}" "${cachePath}".in |while read lineMy2 ;do
if [ -f "${lineMy2}" ] ;then
if [ -z "${filePath}" ] ;then
filePath="${lineMy2}"
dirName="$(dirname "${filePath}")"
oldName=$(basename "${filePath}" |sed -rn 's#^(.*)\.([^\.]*)|([^\.]+)$#\1\3#p')
typeName=$(basename "${filePath}" |sed -rn 's#^(.*)\.([^\.]*)|([^\.]+)$#\2#p')
fi
md5File=$(md5sum "${lineMy2}" |cut -c1-4 )
mv -nv "${lineMy2}" "${dirName}/${oldName}.${md5File}.${typeName}"
else
if [ -z "${dirPath}" ] ;then
dirPath="${lineMy2}"
else
mv -vn "${lineMy2}"/* "${lineMy2}"/\.[^\.]* "${lineMy2}"/\.\.?* "${dirPath}"/.
rmdir "${lineMy2}"
fi
fi
done
done
rm -rf /tmp/duples$$*