IT박스

파일 이름없이 md5sum을 사용하여 해시 값만 가져옵니다.

itboxs 2020. 6. 5. 21:06
반응형

파일 이름없이 md5sum을 사용하여 해시 값만 가져옵니다.


md5sum을 사용하여 파일의 해시 값을 생성합니다. 그러나 파일 이름이 아닌 해시 값만 수신하면됩니다.

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

3abb17b66815bc7946cefe727737d295 ./iso/somefile.iso

파일 이름을 '스트립'하고 값만 유지하려면 어떻게해야합니까?


또 다른 방법 :)

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

간단한 배열 할당이 작동합니다 ... 배열의 첫 번째 요소 인덱스 없이 bash만 처리 할 수 ​​있습니다 . 즉, md5sum의 32 자만 포함합니다.name[0]$md5

md5=($(md5sum file))
echo $md5
# 53c8fdfcbb60cf8e1a1ee90601cc8fe2

cut공백으로 줄을 나누고 첫 번째 필드 만 반환 하는 사용할 수 있습니다 .

md5=$(md5sum "$my_iso_file" | cut -d ' ' -f 1)

Mac OS X의 경우 :

md5 -q file

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. 이것이 실제로 중요한지 여부는 별도의 질문입니다. 당신은 아마 그 차이를 알아 차리기 힘들 것입니다.


다른 방법은 다음과 같습니다.

md5sum filename |cut -f 1 -d " "

잘라내 기는 각 공간으로 줄을 나누고 첫 번째 필드 만 반환합니다.


인쇄해야하고 개행이 필요하지 않은 경우 다음을 사용할 수 있습니다.

printf $(md5sum filename)

md5=$(md5sum < $file | tr -d ' -')

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

md5sum파일 이름에 백 슬래시가 있으면 해시 앞에 백 슬래시를 넣습니다. 첫 32 자 또는 첫 공백 앞의 항목은 적절한 해시가 아닐 수 있습니다. 표준 입력 (파일 이름은 그냥-)을 사용할 때 발생하지 않으므로 픽셀 비트의 대답 은 효과가 있지만 많은 다른 사람들 은와 같은 것을 추가해야합니다 | tail -c 32.


글쎄, 오늘 같은 문제가 있었지만 find명령을 실행할 때 파일 md5 해시를 얻으려고했습니다 . 가장 투표가 많은 질문이 있고 md5find 명령을 실행하기 위해 호출 된 함수로 래핑했습니다 . 나를위한 임무는 폴더의 모든 파일에 대한 해시를 계산하고로 출력하는 것이 었습니다 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 ${my_iso_file} | sed '/ .*//' )

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

참고 URL : https://stackoverflow.com/questions/3679296/only-get-hash-value-using-md5sum-without-filename

반응형