循环比较目录中的多个文件,当两个文件某个内容相同的就移除这两个,继续比对,LinuxSHELL脚本怎么写?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了循环比较目录中的多个文件,当两个文件某个内容相同的就移除这两个,继续比对,LinuxSHELL脚本怎么写?相关的知识,希望对你有一定的参考价值。

事先建立一个文件夹tempfolder,每一个文件与其他所有文件比较后mv到tempfolder,剩下的文件再与其他文件比较。“两个文件某个内容相同”???????
一行格式的命令:

for i in * ;do for j in * ;do if [ -f "$i" ] && [ -f "$j" ] && [ "$i" != "$j" ]; then echo "$i"," ","$j" ;F1=$(grep 内容 “$i”);F2=$(grep 内容 “$j”) ; if [ "$F1" != "" ] && [ "$F2" != "" ] ;then rm "$i" "$j" ;fi ;fi ;done ;if [ -f "$i" ] ;then mv "$i" ./tempfolder;fi; done

多行格式命令:

for i in * ;do
for j in * ;do
if [ -f "$i" ] && [ -f "$j" ] && [ "$i" != "$j" ]; then
echo "$i"," ","$j" #测试语句
F1=$(grep 内容 “$i”)
F2=$(grep 内容 “$j”)
if [ "$F1" != "" ] && [ "$F2" != "" ] ;then
rm "$i" "$j"
fi
fi
done
if [ -f "$i" ] ;then
mv "$i" ./tempfolder
fi
done追问

两个不同目录下文件比对呐?你这个只能同一个目录下递归

追答

问题不是很详细。所以就按简单的情况编写。两个目录也没有问题。只要将for 改一下就可以了,例如
for i in PATH1/* ;do
for j in PATH2/*;do

不过比较的文件只在目录的第一层,没有遍历子目录。

参考技术A #!/bin/bash

#创建备份目录
if [ ! -e /opt/backup ];then
mkdir $BACKUP;
fi

#设定目录及文件
BACKUP=/opt/backup
SRC=/test
HASHFILE=/opt/backup/hashfile.txt
REPEATHASH=/opt/backup/repeathash.txt

#给所有文件生成hash值
find $SRC -type f -exec md5sum \; > $HASHFILE
#查询重复的hash值
find $SRC -type f -exec md5sum \;|awk 'print $1' |sort |uniq -c |awk 'if($1>1)print $2' > $REPEATHASH
#如果没有md5sum可以用openssl md5代替
#find $SRC -type f -exec openssl md5 \;|awk 'print $2'|sort |uniq -c |awk 'if($1>1)print $2' > $REPEATHASH

#查询hash有重复的文件并move到备份目录
for HASH1 in `cat $REPEATHASH`;do
mv `grep $HASH1 $HASHFILE |awk 'print $2'` $BACKUP
done;

Centos-对比文件差异-diff

diff

  比较文件差异

 

相关选项

  -c      显示全部内容,并标记不同之处

  -b      忽略行尾空格,并认为字符串中一个或多个空格视为相同

  -r       当比较双方都是目录时,会比较子目录中的文件

  -s      当两个文件相同时,会显示文件的相同信息

 

相关信息

   a    追加

  d     删除

  c     修改

  这些字符前面的数字表示文件1的行号,后面的数字表示文件2的行号

  <  开头属于文件1, 开头属于文件2

 

以上是关于循环比较目录中的多个文件,当两个文件某个内容相同的就移除这两个,继续比对,LinuxSHELL脚本怎么写?的主要内容,如果未能解决你的问题,请参考以下文章

applescript 重复循环会立即反映变化吗?

在UNIX shell编程里如何比较两个文件哪个修改的时间晚些!急谢谢!

Linux-diff --比较两个文件并输出不同之处

用于比较两个不同目录中文件内容的Python程序

Linux-(diff)

将来自“for”循环的相同输出定向到两个文件?