¿Encontrar un archivo cuando sabes su suma de comprobación?
30
Tengo el md5sumarchivo y no sé dónde está en mi sistema. ¿Hay alguna opción fácil de findidentificar un archivo basado en su md5? ¿O necesito desarrollar un pequeño script?
Estoy trabajando en AIX 6 sin las herramientas de GNU.
Al que desea llamar -pruneen /sys/ /procen vez de descender en ellos y excluir archivos con -path. Usted debe preferir !sobre -notla portabilidad.
Stéphane Chazelas
Señor, he actualizado con -prune, una vez verifique si está bien.
Rahul Patil
También desea excluir /devciertamente.
Simon Richter
12
Solución 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
Solución Bash Script basada en la probabilidad que funciona más rápido
[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 una vez mire el resultado de la prueba y hágamelo saber y también haga algunas pruebas de su lado y muéstrenos el resultado, sería genial ver el resultado en AIX. : D
Rahul Patil
Mi principal problema con su script es que necesita ruby y no está instalado en mi sistema, y no soy administrador. pero haré algunas pruebas esta noche si encuentro algo de tiempo
Kiwy
Parece más rápido que encontrar al final ^^. tal vez podría poner el md5sum en un hilo para que pueda calcular 5 md5sum al mismo tiempo que también podría ahorrar un poco de tiempo
Kiwy
7
Si decide instalar gnu find de todos modos (y dado que indicó interés en uno de sus comentarios), puede intentar algo como:
y checkmd5comparar el md5sum del archivo que obtiene como argumento comparar con el segundo argumento e imprimir el nombre si coincide y salir con 1 (en caso contrario con 0). El -quittendrá que findparar una vez que se encuentra.
checkmd5 (no probado):
#!/bin/bash
md=$(md5sum $1 | cut -d' ' -f1)
if [ $md == $2 ] ; then
echo $1
exit 1
fi
exit 0
Respuestas:
Utilizando
find
:Si busca
/
, puede excluir/proc
y/sys
ver el siguientefind
ejemplo de comando:También hice algunas pruebas,
find
tomé más tiempo y menos CPU y RAM, donde el script ruby está tomando menos tiempo pero más CPU y RAMResultado de la prueba
Encontrar
Encuentra con
-prune
Ruby Script
fuente
-prune
en/sys
//proc
en vez de descender en ellos y excluir archivos con-path
. Usted debe preferir!
sobre-not
la portabilidad./dev
ciertamente.Solución de script
Solución Bash Script basada en la probabilidad que funciona más rápido
Resultado de la prueba
fuente
Si decide instalar gnu find de todos modos (y dado que indicó interés en uno de sus comentarios), puede intentar algo como:
y
checkmd5
comparar el md5sum del archivo que obtiene como argumento comparar con el segundo argumento e imprimir el nombre si coincide y salir con 1 (en caso contrario con 0). El-quit
tendrá quefind
parar una vez que se encuentra.checkmd5
(no probado):fuente
No package checkmd5 available
, por favor incluya para qué paquete debe instalarsecheckmd5
checkmd5
pero me gusta cómo lo haces-type f
, pero me recuperó elecho $1
que ya había puesto