Add md5sum to ls bash output

I am trying to find files and add them md5sum to the table.

find /store/01 -name "*.fits" -exec chmod -x+r {} \; -exec ls -l {} \; | tee ALL_FILES.LOG 

How to add md5sum file output to ls -l ?

I would like it to output ls -l and an additional md5sum result column

For instance:

 -rw-r--r-- 1 data user 221790 Jul 28 15:01 381dc9fc26082828ddbb46a5b8b55c03 myfile.fits 
+4
source share
3 answers

This one liner will do everything you need (edit your search to suit your needs by adding /store/01 -name "*.fits" -exec chmod -x+r {} \; instead of . -type f in my example ):

 $ find . -type f -exec sh -c 'printf "%s %s \n" "$(ls -l $1)" "$(md5sum $1)"' '' '{}' '{}' \; 

Example:

 /etc/samba$ find . -type f -exec sh -c 'printf "%s %s \n" "$(ls -l $1)" "$(md5sum $1)"' '' '{}' '{}' \; -rw-r--r-- 1 root root 8 2010-03-09 02:03 ./gdbcommands 898c523d1c11feeac45538a65d00c838 ./gdbcommands -rw-r--r-- 1 root root 12464 2011-05-20 11:28 ./smb.conf 81ec21c32bb100e0855b96b0944d7b51 ./smb.conf -rw-r--r-- 1 root root 0 2011-06-27 10:57 ./dhcp.conf d41d8cd98f00b204e9800998ecf8427e ./dhcp.conf 

To get the result as you wish, you can delete the $ 8 field as follows

 /etc/samba$ find . -type f -exec sh -c 'printf "%s %s \n" "$(ls -l $1)" "$(md5sum $1)"' '' '{}' '{}' \; | awk '{$8=""; print $0}' -rw-r--r-- 1 root root 8 2010-03-09 02:03 898c523d1c11feeac45538a65d00c838 ./gdbcommands -rw-r--r-- 1 root root 12464 2011-05-20 11:28 81ec21c32bb100e0855b96b0944d7b51 ./smb.conf -rw-r--r-- 1 root root 0 2011-06-27 10:57 d41d8cd98f00b204e9800998ecf8427e ./dhcp.conf 

NTN

+6
source

this will work:

 find /store/01 -name "*.fits" -exec chmod -x+r {} \; \ | awk '{ line=$0; cmd="md5sum " $9; cmd|getline; close(cmd); print line, $1; }' > ALL_FILES.LOG 
+3
source

How about this?

 find /store/01 -name "*.fits" -exec chmod -x+r {} \; \ | xargs -i md5sum {} > ALL_FILES.LOG 

ls spoils and is not needed.

Edit If you really want ls

 for file in `find /store/01 -name "*.fits"`; do chmod -x+r $file; echo -n `ls -l $file` " " ; echo ` md5sum $file | cut -d " " -f 1`; done 

NTN

Steve

0
source

All Articles