Я использую md5sum для генерации хеш-значения для файла. Но мне нужно только получить значение хеша, а не имя файла.
md5=`md5sum ${my_iso_file}`
echo ${md5}
3abb17b66815bc7946cefe727737d295 ./iso/somefile.iso
Как я могу «удалить» имя файла и оставить только значение?
Ответы:
Ну по другому :)
источник
md5=`md5sum < ${my_iso_file}`
однако, это все еще выводит «-» в конце. Но для сравнения этого должно быть достаточно.MD5 (/Users/hello.txt) = 24811012be8faa36c8f487bbaaadeb71
и ваш код возвращаетсяMD5
.-
, добавив| awk '{print $1}'
конец вашего кода =>md5sum < ${my_iso_file} | awk '{print $1}'
@ChristopheDeTroyerРаботает простое присвоение массива ... Обратите внимание, что первый элемент
bash
массива может быть адресован толькоname
без[0]
индекса, т. Е.$md5
Содержит только 32 символа md5sum.источник
bash
, но можете ли вы сказать мне, является ли массив функцией bash only или какой-то стандарт оболочки?echo>file; for i in file; do md5=($(md5sum file)); echo $md5; done
- Должно68b329da9893e34099c7d8ad5cb9c940
echo ($(echo -n foo | md5sum))
не работает? Ошибкиbash: syntax error near unexpected token $(echo -n foo | md5sum)'
echo -n foo | md5sum
выводит 2 слова оболочки на стандартный вывод :acbd18db4cc2f85cedef654fccc4a4d8
и-
(-
источник указывает как стандартный вывод ). - Вы должны сказать Баш , чтобы захватить эти слова в строку, используя Подстановку команд :$( command )
. -(
Скобки)
создают массив bash с 2 элементами. Однако вы должны присвоить эту конструкцию массива( … )
имени переменной; следовательно, используя md5 как имя массива:md5=($(echo -n foo | md5sum))
. Вы не присвоили массив имени переменнойВы можете использовать,
cut
чтобы разбить строку на пробелы и вернуть только первое такое поле:источник
cut -c 1-32
md5sum
->sha256sum
не помня, какое количество символов нужно «вырезать».В Mac OS X:
источник
gmd5sum
отcoreutils
будет работать на MacOS, как иmd5sum
в других ответах, упомянутых здесь.источник
$()
(хотя они не приносят вреда), но, безусловно, они нужны${}
.В одну сторону:
По-другому:
По-другому:
(Не пытайтесь делать это с обратными галочками, если вы не очень смелы и очень хорошо справляетесь с обратными слешами.)
Преимущество этих решений перед другими решениями состоит в том, что они вызывают только
md5sum
оболочку, а не другие программы, такие какawk
илиsed
. Имеет ли это значение на самом деле - это отдельный вопрос; вам, вероятно, будет трудно заметить разницу.источник
Еще один способ сделать:
Cut разделит линию на каждое пространство и вернет только первое поле.
источник
источник
Если вам нужно распечатать его и вам не нужен перевод строки, вы можете использовать:
источник
источник
md5sum
ставит обратную косую черту перед хешем, если в имени файла есть обратная косая черта. Первые 32 символа или что-либо перед первым пробелом могут быть неправильным хешем. Это не произойдет при использовании стандартного ввода (имя файла будет просто -), поэтому ответ pixelbeat будет работать, но многим другим потребуется добавить что-то подобное| tail -c 32
.источник
Ну, сегодня у меня была такая же проблема, но я пытался получить хэш файла md5 при запуске
find
команды. Я получил вопрос с наибольшим количеством голосов и обернул его в функцию, вызываемуюmd5
в команде find. Миссия для меня была вычислить хеш для всех файлов в папке и вывести его какhash:filename
.Итак, я получил кое-что отсюда, а также от find -exec функцию оболочки?
источник
Для полноты пути с помощью sed используем regex и capture group:
Выражение regulare захватывает все в группе, пока не будет достигнут пробел. Чтобы заставить работать группу захвата, вам нужно захватить все в седе. (Подробнее о группах sed и caputer здесь: https://stackoverflow.com/a/2778096/10926293 )
В качестве разделителя в sed я использую двоеточия, потому что они недопустимы в путях к файлам, и мне не нужно избегать косой черты в Путь файла.
источник
По-другому:
источник
источник