Trouver un fichier lorsque vous connaissez sa somme de contrôle?
30
J'ai le md5sumfichier et je ne sais pas où il se trouve sur mon système. Existe-t-il une option simple findpour identifier un fichier en fonction de son md5? Ou dois-je développer un petit script?
Vous voulez appeler -prunesur /sys/ /procau lieu de descendre en eux et exclure les fichiers avec -path. Vous devriez préférer !la -notportabilité.
Stéphane Chazelas
Monsieur, j'ai mis à jour avec -prune, une fois vérifier s'il est OK.
Rahul Patil
Vous voulez également exclure /devcertainement.
Simon Richter
12
Solution de script
#!/usr/bin/ruby -w
require 'find'
require 'digest/md5'
file_md5sum_to_match = [ '304a5fa2727ff9e6e101696a16cb0fc5',
'0ce6742445e7f4eae3d32b35159af982' ]
Find.find('/') do |f|
next if /(^\.|^\/proc|^\/sys)/.match(f) # skip
next unless File.file?(f)
begin
md5sum = Digest::MD5.hexdigest(File.read(f))
rescue
puts "Error reading #{f} --- MD5 hash not computed."
end
if file_md5sum_to_match.include?(md5sum)
puts "File Found at: #{f}"
file_md5sum_to_match.delete(md5sum)
end
file_md5sum_to_match.empty? && exit # if array empty then exit
end
Solution Bash Script basée sur la probabilité qui fonctionne plus rapidement
[root@dc1 /]# time bash find.sh 304a5fa2727ff9e6e101696a16cb0fc5
Please wait... searching for file
304a5fa2727ff9e6e101696a16cb0fc5 /var/log/file1
real 0m21.067s
user 0m1.947s
sys 0m2.594s
@Kiwy, je ne recommande pas, juste pour la pratique
Rahul Patil
@Kiwy regarde une fois le résultat du test et faites-le moi savoir et faites également des tests de votre côté et montrez-nous le résultat, ce serait formidable de voir le résultat sur AIX. : D
Rahul Patil
Mon principal problème avec votre script est qu'il a besoin de ruby et qu'il n'est pas installé sur mon système et que je ne suis pas administrateur. mais je vais faire un test ce soir si je trouve du temps
Kiwy
Cela semble plus rapide que de trouver à la fin ^^. vous pourriez peut-être mettre le md5sum dans un thread afin que vous puissiez calculer 5 md5sum en même temps, cela pourrait également gagner un peu de temps
Kiwy
7
Si vous décidez d'installer gnu find de toute façon (et puisque vous avez indiqué votre intérêt pour l'un de vos commentaires), vous pouvez essayer quelque chose comme:
et checkmd5comparer la somme md5 du fichier obtenu en tant qu'argument au deuxième argument et afficher le nom s'il correspond et quitter avec 1 (au lieu de 0 sinon). Le -quitsera findarrêté une fois qu'il sera trouvé.
checkmd5 (pas testé):
#!/bin/bash
md=$(md5sum $1 | cut -d' ' -f1)
if [ $md == $2 ] ; then
echo $1
exit 1
fi
exit 0
Réponses:
En utilisant
find
:Si vous recherchez,
/
vous pouvez exclure/proc
et/sys
voir l'find
exemple de commande suivant :De plus, j'avais fait des tests,
find
pris plus de temps et moins de CPU et de RAM où le script ruby prend moins de temps mais plus de CPU et de RAMRésultat du test
Trouver
Trouvez avec
-prune
Ruby Script
la source
-prune
sur/sys
//proc
au lieu de descendre en eux et exclure les fichiers avec-path
. Vous devriez préférer!
la-not
portabilité./dev
certainement.Solution de script
Solution Bash Script basée sur la probabilité qui fonctionne plus rapidement
Résultat du test
la source
Si vous décidez d'installer gnu find de toute façon (et puisque vous avez indiqué votre intérêt pour l'un de vos commentaires), vous pouvez essayer quelque chose comme:
et
checkmd5
comparer la somme md5 du fichier obtenu en tant qu'argument au deuxième argument et afficher le nom s'il correspond et quitter avec 1 (au lieu de 0 sinon). Le-quit
serafind
arrêté une fois qu'il sera trouvé.checkmd5
(pas testé):la source
No package checkmd5 available
, veuillez indiquer pour quel paquet doit être installécheckmd5
checkmd5
mais j'aime la façon dont vous la faites-type f
, mais elle a été annulée, je l'echo $1
avais déjà insérée