На этот вопрос уже есть ответ:
У меня есть каталог картинок.
Мне нужен MD5-хэш каждого файла в этом каталоге и имя файла, помещенного в документ .txt
. Этот файл необходимо прочитать позже, чтобы одновременно ссылаться на MD5 и имя файла.
Примечание:
Я хотел бы просто вытащить все файлы каталогов, указав их мной.
Я пробовал играть с tar
и find
, и мне просто не удалось найти хорошее решение ...
Это пример каталога:
/Desktop/testing
RandomFilename1.png
RandomFilename2.png
RandomFilename3.png
Вывод .txt
:
RandomFilename1,da39a3ee5e6b4b0d3255bfef95601890afd80709
RandomFilename2,da39a3ee5e6b4b0d3255bfef95601890afd80709
RandomFilename3,da39a3ee5e6b4b0d3255bfef95601890afd80709
Я безуспешно искал везде в сети.
Это будет на терминале Linux.
Можно использовать следующее bash
команда:
for file in testing/*; do md5sum $file; done > res.txt
Конечно, необходимо скорректировать целевой каталог res.txt
.
Результат мог выглядеть подобным этому:
8b1500ea6fe42927891fd1831bb955ba testing/Pic1.gif
73f3222889a14411a3b78675ed0bc269 testing/Pic2.gif
c5b18ef1ea1346f13f668a7ead4e4c92 testing/Pic3.gif
Таким образом, хеш MD5 сопровождается именем файла и путем.
Для того, что вы хотите сделать, выполните md5sum
и используйте sed
или awk
для преобразования вывода
md5sum *.png | sed 's/^\([0-9a-f]\+\) \+\(.\+\)/\2,\1/' >images.md5sums
md5sum *.png | awk '{print $2","$1}' >image.md5sums
Однако, простой вывод md5sum
равен hash filename
и эквивалентно вашему формату. Использование этого стандартного формата вывода md5sum
часто более удобно, так как вы можете использовать его непосредственно с md5sum -c
для проверки хеша файлов (после копирования или передачи по сети). Некоторые другие утилиты также могут ожидать этот конкретный формат.
Я записал маленький сценарий согласно определенным параметрам:
cd /home/username/Desktop/testing
for F in *
do
echo "$F", $(md5sum "$F" | sed -e 's/'"$F"'//g')
done
Пример произвел:
1.txt, c8ef7cca2ceb3f878921b1ff163dbf91
demo, e9470a3c74b32036fa148dfabce70929
File with spaces.txt, c691b3d2fc2678839a9c141b6ee1524e
line.cpp, e0732d2781c6b2b57d413f79f9c1fd28
test, 3734699610e8d322767cf65f90ed43ce
test.cpp, afbe5b90cf002e1eb6df4cf98dfe4c0e
Примечание: Этот сценарий показал бы вывод в терминале. Для сохранения его в файле, можно использовать > 1.txt
при выполнении файла, для, например:
./test.sh > 1.txt