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

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容