![如何根据哈希值找到一个文件?](https://linux22.com/image/918309/%E5%A6%82%E4%BD%95%E6%A0%B9%E6%8D%AE%E5%93%88%E5%B8%8C%E5%80%BC%E6%89%BE%E5%88%B0%E4%B8%80%E4%B8%AA%E6%96%87%E4%BB%B6%EF%BC%9F.png)
在 Linux 中,如何根据给定的 Hash 值找到文件?
请注意,我不想找到文件的哈希值,我需要的是它的反面。
答案1
根据我对这个问题的假设和理解,您可能可以通过几种方式来做到这一点。
一种方法是,如果你确切知道要查找哈希匹配的目录,那么你可以直接传递哈希,然后检查该目录中的文件。所以基本上你要做的是:
myHash="$1"
[[ $(sha256sum fileName | awk {'print $1'}) == "$myHash" ]] && echo "File found"
使用 for 循环简化此过程:
checkHash(){
myHash="$1" ## The hash of the file that you want to find
if (( $# == 1 )); then ## Must pass at least one argument
## Checking each file in the pwd
for X in *; do
if [[ -f $X ]]; then
local hash=$( sha256sum $X | awk '{print $1}' )
[[ "$myHash" == "$hash" ]] && {
echo "Hash matches for $X";
}
fi
done
fi
}
checkHash "$@"
但是,这不会扫描任何以点开头的文件的哈希值。
另一种方法是使用xargs
和find
命令。
作为@MelcomX 指出使用find
命令,您可以在一行中完成此操作,但可能需要很长时间。此解决方案的好处是您可以传递部分哈希,并且由于它是grep
ing,因此它仍可工作。
find / -exec sha512sum {} + | grep YOURHASHHERE
如果这不是您要找的内容,请详细说明您的问题@Eliah Kagan在评论中提出建议,以便我们了解您正在寻找的内容,或考虑接受答案。