Print md5sum of results of a find command in Linux

15,045

Solution 1

You could use something like this to execute a command on each file:

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

Solution 2

This will also work to recursively hash all files in the current directory or sub-directories (thanks to my sysadmin!):

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

The above will prepend "./" to the filename (without including the path).

Using the -exec suggestion from mux prepends "*" to the filename (again, without the path).

The listed file order also differed between the two, but I am unqualified to say exactly why, since I'm a complete noob to bash scripting.

Edit: Forget the above regarding the prepend and full path, which was based on my experience running remotely on an HPC. I just ran my sysadmin's suggestion on my local Windows box using cygwin and got the full path, with "*./" prepended. I'll need to use some other fanciness to dump the inconsistent path and prepending, to make the comparison easier. In short, YMMV.

Share:
15,045
James Mclaren
Author by

James Mclaren

Updated on July 04, 2022

Comments

  • James Mclaren
    James Mclaren almost 2 years

    I am tryng to do checksum on all .jar files I can find in directory and its sub directories. Then print the filename with the checksum value to a file.

    this is what I have.

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

    I am trying to join two commands together that I know work individually.

    Any help appreciated.

  • James Mclaren
    James Mclaren over 11 years
    Thank you for this. It worked perfect. Any addition, any way to only write the file name in the file and not the full folder path.
  • iabdalkader
    iabdalkader over 11 years
    @JamesMclaren yes if you add -printf "%f\n" it will print just the filename but I don't think it will work as md5sum needs the full path, you could remove the path after executing the command with sed or awk