在Linux中,打印find命令结果的md5sum。

8

我正在尝试对目录及其子目录中找到的所有.jar文件进行校验和。然后将带有校验和值的文件名打印到文件中。

这是我的代码:

md5sum | find -name *.jar >result.txt

我正在尝试将两个单独可行的命令结合在一起。
任何帮助都将不胜感激。

你可能也会发现hashdeep很有用:http://md5deep.sourceforge.net/ - djeikyb
3个回答

13

你可以使用类似这样的方法,在每个文件上执行一个命令:

find . -name "*.jar" -exec md5sum {} \; >result

谢谢您。它完美地运行了。是否有任何方法只在文件中写入文件名而不是完整的文件夹路径? - James Mclaren
@JamesMclaren 如果你添加 -printf "%f\n",它将仅打印文件名,但我认为它不会起作用,因为 md5sum 需要完整路径,你可以在执行命令后使用 sedawk 删除路径。 - iabdalkader

3

这也适用于递归哈希当前目录或子目录中的所有文件(感谢我的系统管理员!):

md5sum $(find . -name '*.jar') > result.txt

上述代码将在文件名前(不包括路径)添加"./"。
使用mux的-exec建议会在文件名前(同样不包括路径)添加"*"。
两者列出的文件顺序也有所不同,但我不太了解具体原因,因为我对bash脚本完全是新手。
编辑:忘掉上面关于前缀和完整路径的内容吧,那是基于我在HPC上远程运行的经验。我刚在我的本地Windows机器上使用cygwin运行了我的系统管理员的建议,并得到了完整路径,前缀为“*./”。我需要使用其他技巧来删除不一致的路径和前缀,以便更轻松地进行比较。简而言之,你的情况可能有所不同。

1

您还可以将结果导向 xargs

find . -name "*.jar" | xargs md5sum > result.txt

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接