Хеширование нескольких файлов - PullRequest
3 голосов
/ 03 декабря 2009

Спецификация проблемы:

Учитывая каталог, я хочу перебрать каталог и его не скрытые подкаталоги,
и добавить хэш джакузи в не скрытый имена файлов.
Если скрипт будет перезапущен, он заменит старый хеш новым.

<filename>.<extension> ==> <filename>.<a-whirlpool-hash>.<extension>

<filename>.<old-hash>.<extension> ==> <filename>.<new-hash>.<extension>


Вопрос:

а) Как бы вы это сделали?

б) Что делает ваш метод наиболее подходящим из всех доступных вам методов?


Вердикт:

Спасибо всем, я выбрал ответ SeigeX за его скорость и мобильность.
Это намного быстрее, чем другие варианты bash,
и это работало без изменений на моей машине Mac OS X.

Ответы [ 13 ]

1 голос
/ 03 декабря 2009

Возможно, вы захотите сохранить результаты в одном файле, как в

find . -type f -exec md5sum {} \; > MD5SUMS

Если вы действительно хотите один файл на хеш:

find . -type f | while read f; do g=`md5sum $f` > $f.md5; done

или даже

find . -type f | while read f; do g=`md5sum $f | awk '{print $1}'`; echo "$g $f"> $f-$g.md5; done
0 голосов
/ 04 декабря 2009

Ruby:

#!/usr/bin/env ruby
require 'digest/md5'

Dir.glob('**/*') do |f|
  next unless File.file? f
  next if /\.md5sum-[0-9a-f]{32}/ =~ f
  md5sum = Digest::MD5.file f
  newname = "%s/%s.md5sum-%s%s" %
    [File.dirname(f), File.basename(f,'.*'), md5sum, File.extname(f)]
  File.rename f, newname
end

Обрабатывает имена файлов с пробелами, без расширения и уже хэшированные.

Игнорирует скрытые файлы и каталоги - добавьте File::FNM_DOTMATCH в качестве второго аргументаglob, если это желательно.

0 голосов
/ 03 декабря 2009

с использованием zsh:

$ ls
a.txt
b.txt
c.txt

Магия:

$ FILES=**/*(.) 
$ # */ stupid syntax coloring thinks this is a comment
$ for f in $FILES; do hash=`md5sum $f | cut -f1 -d" "`; mv $f "$f:r.$hash.$f:e"; done
$ ls
a.60b725f10c9c85c70d97880dfe8191b3.txt
b.3b5d5c3712955042212316173ccf37be.txt
c.2cd6ee2c70b0bde53fbe6cac3c8b8bb1.txt

Счастливая деконструкция!

Редактировать: добавленные файлы в подкаталогах и кавычки вокруг mv аргумент

...