2011-07-29 4 views
4

J'essaie de trouver des fichiers et d'ajouter leur md5sum dans une table.Ajouter md5sum dans la sortie ls bash

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

Comment puis-je ajouter à la sortie ls -l la somme MD5 du fichier?

Je voudrais avoir la sortie ls -l et une colonne supplémentaire du résultat md5sum

.: par exemple

-rw-r--r-- 1 data user 221790 Jul 28 15:01 381dc9fc26082828ddbb46a5b8b55c03 myfile.fits 

Répondre

6

Celui-liner fera ce faire vous voulez (modifiez la recherche de répondre à vos besoins en ajoutant le /store/01 -name "*.fits" -exec chmod -x+r {} \; au lieu du . -type f dans mon exemple):

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

Exemple:

/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 

Pour obtenir la sortie que vous voulez, vous pouvez supprimer le champ 8 $ comme suit

/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 

HTH

+0

Merci! Mais je dois mettre $ 9 = "" pour produire ce dont j'ai besoin. – Arman

0

Comment cela?

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

Le ls est déconner et n'est pas nécessaire.

Modifier Si vous "vraiment" voulez que 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 

HTH

Steve

+0

merci pour la réponse, je voudrais avoir une sortie ls -l et un poste ra colonne de résultat md5sum. – Arman

3

ceci fonctionne:

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