3.4 查找并删除重复文件

《Linux Shell 脚本攻略(第 2 版)》读书笔记

#!/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命令的使用。

你可能感兴趣的:(3.4 查找并删除重复文件)