【发布时间】:2017-03-29 16:02:04
【问题描述】:
我正在研究 shell 脚本,有一个练习要求计算文件夹中所有文件的 md5 哈希值。如果有两个文件具有相同的哈希值,它还要求在终端中打印它们的名称。我的代码可以做到这一点,但是一旦找到匹配项,就会打印两次。我不知道如何从下一次迭代中排除第一个文件名。 另一件事:禁止创建任何临时文件来帮助完成任务。
#!/bin/bash
ifs=$IFS
IFS=$'\n'
echo "Verifying the files inside the directory..."
for file1 in $(find . -maxdepth 1 -type f | cut -d "/" -f2); do
md51=$(md5sum $file1 | cut -d " " -f1)
for file2 in $(find . -maxdepth 1 -type f | cut -d "/" -f2 | grep -v "$file1"); do
md52=$(md5sum $file2 | cut -d " " -f1)
if [ "$md51" == "$md52" ]; then
echo "Files $file1 e $file2 are the same."
fi
done
done
我也想知道是否有更有效的方法来完成这项任务。
【问题讨论】:
-
当然有。如果您打印出每个文件 md5sum,对它们进行排序并找到两个或多个连续的 md5sum 会怎样?
find ··· | xargs md5sum | sort | uniq ···