Bash 通过查看查找文件中列出的md5校验和来删除文件

Bash 通过查看查找文件中列出的md5校验和来删除文件,bash,unix,Bash,Unix,我需要通过查看查找文件中存在的Md5校验和值来从目录中删除文件 查找文件值-md5lkp.txt aac2050c8f3a0b6de33c6a0976a77c77 TEST_20190505060848.csv c36c63d1b0dcf0a34a6285597ae67e93 TEST_20190505130157.csv e72caf404c85d712971fa5b491204a58 TEST_20190506060803.csv 6c8dba8210a7df31aecd8b08c01

我需要通过查看查找文件中存在的Md5校验和值来从目录中删除文件

查找文件值-md5lkp.txt

aac2050c8f3a0b6de33c6a0976a77c77  TEST_20190505060848.csv
c36c63d1b0dcf0a34a6285597ae67e93  TEST_20190505130157.csv
e72caf404c85d712971fa5b491204a58  TEST_20190506060803.csv
6c8dba8210a7df31aecd8b08c015919e  TEST_20190506130210.csv
782f1233c6e0a7763e41dd372834253f  TEST_20190507061001.csv
dir-/home/usr1中的文件

TEST_20190505060848.csv
TEST_20190505060850.csv
TEST_20190506130210.csv
TEST_20190506130212.csv
从上面的列表中,应删除下面2个文件

TEST_20190505060848.csv
TEST_20190506130210.csv
请告知

可以通过以下方式解决此问题:


#!/bin/bash

lkpfile=$1

for i in *.csv
do
        md5check=`md5sum $i | cut -d' ' -f1`
        echo "current file $i md5 is $md5check"
        delfile=`grep -r $md5check $lkpfile`
        echo "delfile : $delfile"
        delfilename=`echo $delfile|awk -F' ' '{print $2}'`
        echo "deleting : $delfilename"
        rm $delfilename
done
试试这个:

#!/bin/bash
mapfile -t hashs < <(cut -d " " -f1 md5ljp.txt)
while read -r file; do
    sum=$(md5sum "$file")
    [[ ${hashs[*]} =~ ${sum%% *} ]] && rm "$file"
done < <(ls ./*.csv)
#/bin/bash

mapfile-t hash能够实现如下所示

#!/bin/bash

lkpfile=$1

for i in *.csv
do
        md5check=`md5sum $i | cut -d' ' -f1`
        echo "current file $i md5 is $md5check"
        delfile=`grep -r $md5check $lkpfile`
        echo "delfile : $delfile"
        delfilename=`echo $delfile|awk -F' ' '{print $2}'`
        echo "deleting : $delfilename"
        rm $delfilename
done

StackOverflow不是免费的编码服务。你应该会的。请更新您的问题,以显示您已在某个应用程序中尝试过的内容。有关更多信息,请参阅,并使用:)在读取md5文件名时,这似乎应该是一个非常简单的
;做完成
循环。为什么MD5在这里很重要?它看起来只是一个文件名的比较。或者,因为文件是MD5命令输出,所以这里提到的是MD5吗?需要MD5校验和值,因为同一个文件可能会再次使用不同的名称,但内容相同,因此需要根据内容而不是名称删除文件。请查看: