shell 删除重复文件

shell 删除重复文件的脚本

#!bin/bash
#文件名:remove_duplicates.sh
#用途:查找并删除重复文件,每一个文件只保留一个样本

ls -lS | awk 'BEGIN{
getline;getline;
name1=$8; size=$5
  }
  { name2=$8;
  if (size==$5)
  {
  "md5sum "name1 | getline;csum1=$1
  "md5sum "name2 | getline;csum2=$1
  if ( csum1==csum2 )
  {print name1; print name2 }
  };
  size=$5;  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 duplicate_files duplicate_sample -2 -3 | tee /dev/stderr | xargs rm
echo  Removed duplicates files successfully

解析

ls -lS 对当前目录下的所有文件按照文件大小进行排序,并列出文件详细信息
awk读取ls -lS的输出,对列进行比较,找出重复文件
shell 删除重复文件_第1张图片
补充:md5sum命令用于生成和校验文件的md5值。它会逐位对文件的内容进行校验。是文件的内容,与文件名无关,也就是文件内容相同,其md5值相同。md5值是一个128位的二进制数据,转换成16进制则是32(128/4)位的进制值。
md5sum file
# md5sum data
0a6de444981b68d6a049053296491e49 data
shell 删除重复文件_第2张图片

你可能感兴趣的:(shell)