bash - check - Получите только хэш-значение, используя md5sum(без имени файла)




ubuntu md5 hash file (10)

В Mac OS X:

md5 -q file

Я использую md5sum для генерации хэш-значения для файла. Но мне нужно получить только хэш-значение, а не имя файла.

md5=`md5sum ${my_iso_file}`
echo ${md5}

3abb17b66815bc7946cefe727737d295 ./iso/somefile.iso

Как я могу «удалить» имя файла и сохранить значение?


В одну сторону:

set -- $(md5sum $file)
md5=$1

Другой путь:

md5=$(md5sum $file | while read sum file; do echo $sum; done)

Другой путь:

md5=$(set -- $(md5sum $file); echo $1)

(Не пытайтесь делать это с помощью back-ticks, если вы не очень храбры и очень хороши с обратной косой чертой).

Преимущество этих решений над другими решениями заключается в том, что они вызывают только md5sum и оболочку, а не другие программы, такие как awk или sed . На самом деле это вопрос - отдельный вопрос; вам, вероятно, будет трудно заметить разницу.


Другой путь:

md5=$(md5sum ${my_iso_file} | sed '/ .*//' )

Другой способ:

md5sum filename |cut -f 1 -d " "

Cut разделяет линию на каждое пространство и возвращает только первое поле.


Ну другой путь :)

md5=`md5sum ${my_iso_file} | awk '{ print $1 }'`

Ну, сегодня у меня была такая же проблема, но я пытаюсь получить хеш-файл md5 при запуске команды find . Я получил самый проголосовавший вопрос и завернул его в функцию md5 для запуска в команде find. Миссия для меня была вычислять хеш для всех файлов в папке и выводить ее как hash:filename .

md5() { md5sum $1 | awk '{ printf "%s",$1 }'; }
export -f md5
find -type f -exec bash -c 'md5 "$0"' {} \; -exec echo -n ':' \; -print

Итак, у меня были некоторые части отсюда, а также от find -exec shell-функции?


md5sum помещает обратную косую черту перед хешем, если в имени файла есть обратная косая черта. Первые 32 символа или что-то еще до первого места могут не соответствовать правильному хешу. Этого не произойдет при использовании стандартного ввода (имя файла будет просто), так что ответ pixelbeat будет работать, но многим другим потребуется добавить что-то вроде | tail -c 32 | tail -c 32 .


md5="$(md5sum "${my_iso_file}")"
md5="${md5%% *}" # remove the first space and everything after it
echo "${md5}"

md5=$(md5sum < index.html | head -c -4)

md5=`md5sum ${my_iso_file} | cut -b-32`




md5sum