#!/bin/bash
#文件名:remove_duplicates.sh
#用途:查找并删除重复文件,每一个文件只保留一份
ls -lS --time-style=long-iso | awk 'BEGIN {
getline; getline;
name1=$8; size=$5
}
{
name2=$8; size2=$5;
if (size==size2)
{
"md5sum " name1 | getline d; split(d, arr); csum1=arr[1];
"md5sum " name2 | getline d; split(d, arr); csum2=arr[1];
if (csum1==csum2)
{
print name1; print name2
}
};
size=size2; name1=name2;
}' | sort -u >duplicate_files
cat duplicate_files | xargs -I {} md5sum {} | sort | uniq -w 32 | awk '{ print $2 }' | sort -u >duplicate_sample
echo Removing...
comm -2 -3 duplicate_files duplicate_sample | tee /dev/stderr | xargs rm
echo Removed duplicates files successfully.
注意,原书中的例子存在问题,运行结果不能正确删除重复文件。
这里主要是学习awk
命令的使用。