ฉันต้องการสร้างรายการตรวจสอบ md5 สำหรับไฟล์ทั้งหมดในไดเรกทอรี
cat filename | md5sum > ouptput.txt
ฉันต้องการที่จะ ฉันต้องการทำสิ่งนี้ในขั้นตอนที่ 1 สำหรับไฟล์ทั้งหมดในไดเรกทอรีของฉัน
ความช่วยเหลือใด ๆ จะดีมาก
ฉันต้องการสร้างรายการตรวจสอบ md5 สำหรับไฟล์ทั้งหมดในไดเรกทอรี
cat filename | md5sum > ouptput.txt
ฉันต้องการที่จะ ฉันต้องการทำสิ่งนี้ในขั้นตอนที่ 1 สำหรับไฟล์ทั้งหมดในไดเรกทอรีของฉัน
ความช่วยเหลือใด ๆ จะดีมาก
คำตอบ:
คุณสามารถผ่านmd5sum
ชื่อไฟล์หลายรายการหรือการขยายทุบตี:
$ md5sum * > checklist.chk # generates a list of checksums for any file that matches *
$ md5sum -c checklist.chk # runs through the list to check them
cron: OK
database.sqlite3: OK
fabfile.py: OK
fabfile.pyc: OK
manage.py: OK
nginx.conf: OK
uwsgi.ini: OK
หากคุณต้องการจินตนาการคุณสามารถใช้สิ่งต่าง ๆ เช่นfind
เจาะลึกและกรองไฟล์รวมถึงการทำงานซ้ำ:
find -type f -exec md5sum "{}" + > checklist.chk
md5sum
ไฟล์ภายในไดเรคทอรีย่อยการmd5sum *
เปล่งไปสู่ระดับไดเรกทอรีย่อยโดยการพูดว่า ... เป็นได
find -type f -exec md5sum '{}' +
และ `ค้นหา -type f -exec md5sum '{}'` ฉันสามารถรับมันได้ ขอบคุณ :)
openssl md5 * > checklist.txt
**
แบบเรียกซ้ำ (เช่น zsh) มันง่ายกว่ามาก:md5sum **/* 2>/dev/null
โปรแกรมการสร้าง / ตรวจสอบการตรวจสอบที่ยอดเยี่ยมคือ rhash มันสร้างแม้กระทั่งไฟล์ที่เข้ากันได้กับ SFV และตรวจสอบด้วย
รองรับ md4, md5, sha1, sha512, crc32 และอื่น ๆ อีกมากมาย
นอกจากนี้ยังสามารถทำการสร้างซ้ำ (ตัวเลือก -r) เช่น md5deep หรือ sha1deep
สุดท้าย แต่ไม่ท้ายสุดคุณสามารถฟอร์แมตเอาต์พุตของไฟล์เช็คซัม ตัวอย่างเช่น:
rhash --md5 -p '%h,%p\n' -r /home/
ส่งออกไฟล์ CSV รวมถึงเส้นทางแบบเต็มของไฟล์ซ้ำเริ่มต้นด้วย/home
ไดเรกทอรี
ฉันพบว่ามีประโยชน์อย่างยิ่งแม้แต่ตัวเลือก -e เปลี่ยนชื่อไฟล์โดยการใส่ผลรวม crc32 เป็นชื่อ
คุณสามารถเปลี่ยน "md5sum" ด้วย "rhash" ในตัวอย่าง PhoenixNL72
นี่คือตัวอย่างที่ครอบคลุมมากขึ้นอีกสองตัวอย่าง:
สร้างไฟล์ md5 ในแต่ละไดเรกทอรีซึ่งยังไม่มีไฟล์โดยมีพา ธ สัมบูรณ์:
find "$PWD" -type d | sort | while read dir; do [ ! -f "${dir}"/@md5Sum.md5 ] && echo "Processing " "${dir}" || echo "Skipped " "${dir}" " @md5Sum.md5 already present" ; [ ! -f "${dir}"/@md5Sum.md5 ] && md5sum "${dir}"/* > "${dir}"/@md5Sum.md5 ; chmod a=r "${dir}"/@md5Sum.md5;done
สร้างไฟล์ md5 ในแต่ละโฟลเดอร์ซึ่งยังไม่มีไฟล์: ไม่มีพา ธ , ชื่อไฟล์เท่านั้น:
find "$PWD" -type d | sort | while read dir; do cd "${dir}"; [ ! -f @md5Sum.md5 ] && echo "Processing " "${dir}" || echo "Skipped " "${dir}" " @md5Sum.md5 allready present" ; [ ! -f @md5Sum.md5 ] && md5sum * > @md5Sum.md5 ; chmod a=r "${dir}"/@md5Sum.md5 ;done
สิ่งที่แตกต่างระหว่าง 1 และ 2 คือวิธีการนำเสนอไฟล์ในไฟล์ md5 ที่ได้
คำสั่งทำสิ่งต่อไปนี้:
เอาต์พุตของสคริปต์ทั้งหมดนี้สามารถถูกเปลี่ยนเส้นทางไปยังไฟล์ (..... ; Done> test.log) หรือไพพ์ไปยังโปรแกรมอื่น (เช่น grep) ผลลัพธ์จะบอกคุณเพียงไดเรกทอรีที่ข้ามและที่ได้รับการประมวลผล
หลังจากการรันสำเร็จคุณจะจบลงด้วยไฟล์ @ md5Sum.md5 ในแต่ละไดเรกทอรีย่อยของไดเรกทอรีปัจจุบันของคุณ
ฉันตั้งชื่อไฟล์ @ md5Sum.md5 ดังนั้นมันจะแสดงรายการที่ด้านบนสุดของไดเรกทอรีในการแบ่งปันแซมบ้า
การตรวจสอบไฟล์ @ md5Sum.md5 ทั้งหมดสามารถทำได้โดยคำสั่งถัดไป:
find "$PWD" -name @md5Sum.md5 | sort | while read file; do cd "${file%/*}"; md5sum -c @md5Sum.md5; done > checklog.txt
หลังจากนั้นคุณสามารถ grep checklog.txt โดยใช้ grep -v ตกลงเพื่อรับรายการไฟล์ทั้งหมดที่แตกต่างกัน
หากต้องการสร้าง @ md5Sum.md5 ใหม่ในไดเรกทอรีเฉพาะเมื่อคุณเปลี่ยนหรือเพิ่มไฟล์เช่นลบไฟล์ @ md5Sum.md5 หรือเปลี่ยนชื่อและเรียกใช้คำสั่งสร้างอีกครั้ง
ฉันพบปัญหานี้และในขณะที่การแก้ปัญหาข้างต้นนั้นสวยงามฉันต้องการแฮ็คที่รวดเร็วและสกปรกสำหรับสถานการณ์นี้: 1 ไดเรกทอรีโดยมีไดเรกทอรีย่อยหนึ่งระดับที่อยู่ลึกเข้าไปในนั้น
ดังนั้นเข้าสู่ไดเรกทอรีในเปลือกและเรียกใช้:
md5sum * */* 2>/dev/null > md5sum.md5
สิ่งนี้จะได้รับไฟล์ทั้งหมดในไดเรกทอรีระดับบนสุดลบคำเตือนข้อผิดพลาดเกี่ยวกับไดเรกทอรีย่อยที่เป็นไดเรกทอรีแล้วเรียกใช้ md5sums บนเนื้อหาไดเรกทอรีย่อย ข้อได้เปรียบ: ง่ายต่อการจดจำทำสิ่งที่ควรจะทำ ฉันมักจะสับสนด้วยการค้นหาไวยากรณ์และไม่สามารถจำมันได้จากด้านบนของหัวของฉันดังนั้นไม่จำเป็นต้องวนซ้ำ ฯลฯ จัดการกับช่องว่างในชื่อไดเรกทอรีหนึ่งซับนี้ทำงานได้ดี ไม่ใช่โซลูชันที่แข็งแกร่งและทรงประสิทธิภาพไม่ดีสำหรับไดเรกทอรีย่อย> ระดับ 1 แต่สามารถแก้ไขปัญหาได้อย่างรวดเร็วและง่ายดาย