md5sum을 사용하여 파일의 해시 값을 생성합니다. 그러나 파일 이름이 아닌 해시 값만 수신하면됩니다.
md5=`md5sum ${my_iso_file}`
echo ${md5}
3abb17b66815bc7946cefe727737d295 ./iso/somefile.iso
파일 이름을 '스트립'하고 값만 유지하려면 어떻게해야합니까?
md5sum을 사용하여 파일의 해시 값을 생성합니다. 그러나 파일 이름이 아닌 해시 값만 수신하면됩니다.
md5=`md5sum ${my_iso_file}`
echo ${md5}
3abb17b66815bc7946cefe727737d295 ./iso/somefile.iso
파일 이름을 '스트립'하고 값만 유지하려면 어떻게해야합니까?
답변:
또 다른 방법 :)
md5=`md5sum ${my_iso_file} | awk '{ print $1 }'`
md5=`md5sum < ${my_iso_file}`
그러나 이것은 여전히 끝에 "-"를 출력합니다. 그러나 비교를 위해 이것으로 충분합니다.
MD5 (/Users/hello.txt) = 24811012be8faa36c8f487bbaaadeb71
코드가 반환 MD5
됩니다.
-
추가하여 | awk '{print $1}'
코드 =>의 끝을 md5sum < ${my_iso_file} | awk '{print $1}'
@ChristopheDeTroyer
간단한 배열 할당이 작동합니다 ... 배열의 첫 번째 요소 는 인덱스 없이 bash
만 처리 할 수 있습니다 . 즉, md5sum의 32 자만 포함합니다. name
[0]
$md5
md5=($(md5sum file))
echo $md5
# 53c8fdfcbb60cf8e1a1ee90601cc8fe2
bash
있지만 배열이 bash 전용 기능인지 또는 쉘 표준인지 알 수 있습니까?
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 Substitution :을 사용하여 bash 에 해당 단어 를 문자열로 캡처하도록 지시 해야합니다 . – 대괄호 는 2 개의 요소가 있는 bash 배열 을 생성합니다 . 그러나 해당 배열 구성 을 변수 이름에 할당해야합니다 . 따라서 배열 이름으로 md5 를 사용 하십시오 . 변수 이름에 배열을 할당하지 않았습니다$( command )
(
)
( … )
md5=($(echo -n foo | md5sum))
cut
공백으로 줄을 나누고 첫 번째 필드 만 반환 하는 데 사용할 수 있습니다 .
md5=$(md5sum "$my_iso_file" | cut -d ' ' -f 1)
cut -c 1-32
md5sum
-> sha256sum
잘라야 할 문자의 양을 기억하지 않고.
Mac OS X의 경우 :
md5 -q file
gmd5sum
에서이 coreutils
같은 맥 OS에서 작동합니다 md5sum
여기에 언급 된 다른 답변에서.
md5="$(md5sum "${my_iso_file}")"
md5="${md5%% *}" # remove the first space and everything after it
echo "${md5}"
$()
하지 않지만 (해가되지는 않지만) 반드시 따옴표 가 필요합니다 ${}
.
일방 통행:
set -- $(md5sum $file)
md5=$1
또 다른 방법:
md5=$(md5sum $file | while read sum file; do echo $sum; done)
또 다른 방법:
md5=$(set -- $(md5sum $file); echo $1)
(백 슬래시가 너무 용감하고 훌륭하지 않으면 백틱으로 시도하지 마십시오.)
다른 솔루션에 비해이 솔루션의 장점은 단지 호출하는 것입니다 md5sum
오히려 같은 다른 프로그램보다, 쉘 awk
또는 sed
. 이것이 실제로 중요한지 여부는 별도의 질문입니다. 당신은 아마 그 차이를 알아 차리기 힘들 것입니다.
글쎄, 오늘 같은 문제가 있었지만 find
명령을 실행할 때 파일 md5 해시를 얻으려고했습니다 . 가장 투표가 많은 질문이 있고 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 셸 함수를 사용하여 조각을 얻었 습니까?
완전성을 위해 정규식 및 캡처 그룹을 사용하는 sed를 사용하는 방법 :
md5=$(md5sum "${my_iso_file}" | sed -r 's:\\*([^ ]*).*:\1:')
정규 표현식은 공간에 도달 할 때까지 그룹의 모든 것을 캡처합니다. 캡처 그룹을 작동 시키려면 sed에있는 모든 것을 캡처해야합니다. (sed 및 caputer 그룹에 대한 자세한 내용은 https://stackoverflow.com/a/2778096/10926293 )
sed의 구분 기호로 콜론을 사용합니다. 콜론은 파일 경로에서 유효하지 않으므로 슬래시를 벗어날 필요가 없습니다. 파일 경로.
md5=$(md5sum < index.html | head -c -4)