UcallWeconn S.M.B.A., which provides cheap international telephony and sells racks in the datacenter in the Netherlands, made this translation possible
Наступны скрыпт знаходзіць дублікаты (2 ці больш аднолькавых) файлаў і выводзіць новы скрыпт, які змяшчае з-гт пракаментаваў заявы для выдалення іх (скапіюйце тэкст тут):
OUTF=rem-duplicates.sh; echo "#! /bin/sh" > $OUTF; find "$@" -type f -exec md5sum {} \;
| sort --key=1,32 | uniq -w 32 -d --all-repeated=separate | sed -r 's/^[0-9a-f]*
( )*//;s/([^a-zA-Z0-9./_-])/\\\1/g;s/(.+)/#rm \1/' >> $OUTF; chmod a+x $OUTF; ls -l $OUTF
Затым Вы павінны змяніць файл, каб абраць, якія файлы захоўваць - скрыпт не можа бяспечна рабіць гэта аўтаматычна!
Калі вы аддаяце перавагу праграмы C, паспрабуйце, напрыклад fdupes (можа таксама быць даступныя ў сховішча з вас каханы дыстрыбутыў ). Для GUI рашэнне, заснаванае FSlint можа зрабіць гэта за вас.
Код быў напісаны для Debian GNU / Linux і быў правераны з Bash, Zsh і Dash. Зразумела, вы можаце рабіць што заўгодна з ім датуль, пакуль вы не вінаваціце мяне за бедствы ... (выпушчаны ў грамадскім здабытку)
Дзякуючы Лендерт Мэйер, Uriel, Патрык-Эміль Z?rner і некаторыя іншыя для тэставання і паляпшэнні сцэнара.
Той жа сцэнар у больш форме:
OUTF=rem-duplicates.sh;
echo "#! /bin/sh" > $OUTF;
find "$@" -type f -exec md5sum {} \; |
sort --key=1,32 | uniq -w 32 -d --all-repeated=separate |
sed -r 's/^[0-9a-f]*( )*//;s/([^a-zA-Z0-9./_-])/\\\1/g;s/(.+)/#rm \1/' >> $OUTF;
chmod a+x $OUTF; ls -l $OUTF
... І (трохі састарэлы) варыянт для старэйшага Uniq і сартаванні версіі (напрыклад, у Debian Woody):
OUTF=rem-duplicates.sh; ESCSTR="s/([^a-zA-Z0-9])/\\\\\1/g"; SUM="dummy"; echo "#! /bin/sh" > $OUTF; find -type f | sed -r "$ESCSTR" | while read x; do md5sum "$x"; done | sort -k 1,32 | uniq -w 32 -d --all-repeated | while read y; do NEW=`echo "$y-dummy" | sed "s/ .*$//"`; if [ $NEW != $SUM ]; then echo "" >> $OUTF; fi; SUM="$NEW"; echo "$y" | sed -r "s/^[0-9a-f]*(\\ )*//;$ESCSTR;s/(.+)/#rm \1/" >> $OUTF; done; chmod a+x $OUTF; ls -l $OUTF
Прыклад высновы
#! /bin/sh #rm ./gdc2001/113-1303_IMG.JPG #rm ./reppulilta/gdc2001/113-1303_IMG.JPG #rm ./lissabon/01-01-2001/108-0883_IMG.JPG #rm ./kuvat\ reppulilta/lissabon/01-01-2001/108-0883_IMG.JPG #rm ./gdc2001/113-1328_IMG.JPG #rm ./kuvat\ reppulilta/gdc2001/113-1328_IMG.JPG
Тлумачэнне
- напісаць загаловак выйсце сцэнар
- спіс усіх файлаў рэкурсіўна па бягучай дырэкторыі
- экранировать усе патэнцыйна небяспечныя знакі з xargs
- разлік сум MD5
- знайсці аднолькавыя сумы
- здзіраць MD5 сум і пакінуць толькі іх імёны
- бегчы дзіўныя знакі з імёнаў файлаў
- напісаць закаментаваны выдаленні файлаў
- зрабіць выснову сцэнара запісу і LS-л яе