ฉันใช้ 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
อาเรย์สามารถแก้ไขได้โดยเพียงแค่name
ไม่มี[0]
ดัชนีกล่าวคือ$md5
มีเพียง 32 ตัวอักษรของ md5sum
md5=($(md5sum file))
echo $md5
# 53c8fdfcbb60cf8e1a1ee90601cc8fe2
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 คำของเชลล์ไปยังstdout : acbd18db4cc2f85cedef654fccc4a4d8
และ-
( -
หมายถึงซอร์สที่เป็นstdin ) - คุณต้องบอกทุบตีในการจับภาพเหล่านั้นคำพูดเป็นสตริงโดยใช้คำสั่งเปลี่ยนตัว$( command )
: - (
วงเล็บ)
ผลิตbash array ที่มี 2 องค์ประกอบ อย่างไรก็ตามคุณต้องกำหนดอาร์เรย์ที่สร้าง( … )
ให้กับชื่อตัวแปร จึงใช้md5md5=($(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
ทำงานบน MacOS เหมือน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
ไม่ว่าเรื่องนั้นจะเป็นคำถามแยกต่างหากหรือไม่ คุณอาจกดยากที่จะสังเกตเห็นความแตกต่าง
อีกวิธีคือ:
md5sum filename |cut -f 1 -d " "
ตัดจะแบ่งบรรทัดแต่ละช่องว่างและส่งคืนเฉพาะฟิลด์แรกเท่านั้น
md5=$(md5sum < $file | tr -d ' -')
หากคุณต้องการพิมพ์และไม่จำเป็นต้องขึ้นบรรทัดใหม่คุณสามารถใช้:
printf $(md5sum filename)
md5=`md5sum ${my_iso_file} | cut -b-32`
md5sum
วางแบ็กสแลชก่อนแฮชหากมีแบ็กสแลชในชื่อไฟล์ อักขระ 32 ตัวแรกหรืออะไรก็ตามก่อนที่จะเว้นวรรคแรกอาจไม่แฮชที่เหมาะสม มันจะไม่เกิดขึ้นเมื่อใช้เข้ามาตรฐาน (ชื่อไฟล์จะเป็นเพียง -) ดังนั้นคำตอบของ pixelbeatจะทำงาน แต่คนอื่น ๆ | tail -c 32
จำนวนมากจะต้องมีการเพิ่มสิ่งที่ต้องการ
ฉันมีปัญหาเดียวกันในวันนี้ แต่พยายามรับแฮชไฟล์ 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
ดังนั้นฉันจะได้รับชิ้นส่วนจากที่นี่และจากการค้นหา -exec ฟังก์ชั่นเปลือก?
เพื่อความสมบูรณ์ทางด้วย sed ใช้ regex และกลุ่มการจับกุม:
md5=$(md5sum "${my_iso_file}" | sed -r 's:\\*([^ ]*).*:\1:')
นิพจน์ regulare จะจับทุกอย่างในกลุ่มจนกว่าจะถึงที่ว่าง ในการรับกลุ่มการทำงานคุณต้องจับทุกอย่างไว้ (เพิ่มเติมเกี่ยวกับกลุ่ม sed และ caputer ที่นี่: https://stackoverflow.com/a/2778096/10926293 )
ในฐานะตัวคั่นใน sed ฉันใช้ colons เพราะมันไม่ถูกต้องในพา ธ ไฟล์และฉันไม่ต้องหลบ slashed ใน filepath
อีกวิธีหนึ่ง:
md5=$(md5sum ${my_iso_file} | sed '/ .*//' )
md5=$(md5sum < index.html | head -c -4)