Pertanyaan Hasilkan md5 checksum untuk semua file dalam direktori


Saya ingin membuat daftar checksum md5 untuk semua file dalam direktori.

aku ingin cat filename | md5sum > ouptput.txt. Saya ingin melakukan ini dalam 1 langkah untuk semua file di direktori saya.

Bantuan apa pun akan sangat bagus.


59
2017-07-10 14:24


asal


Bagaimana saya dapat menemukan md5sum (checksum) dari file cadangan spesifik? -Apakah seharusnya skrip saya terlihat seperti-apa perintahnya


Jawaban:


Anda bisa lulus md5sum beberapa nama file atau bash ekspansi:

$ 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

Jika Anda ingin menjadi mewah Anda dapat menggunakan hal-hal seperti find untuk menelusuri dan memfilter file, serta bekerja secara rekursif:

find -type f -exec md5sum "{}" + > checklist.chk

90
2017-07-10 14:28



 bagaimana menggunakan cara di atas untuk mendapatkan md5sum dari file di dalam sub direktori, di atas md5sum * memancarkan pergi ke tingkat subdirektori dengan mengatakan ... adalah sebuah direktori - Kasun Siyambalapitiya
Maaf untuk bertanya dengan berlari find -type f -exec md5sum '{}' + dan `find -type f -exec md5sum '{}'` Saya bisa mendapatkannya. Terima kasih :) - Kasun Siyambalapitiya
Saya lebih suka tampilan output ini lebih banyak: openssl md5 * > checklist.txt - ashley


Program pembuatan / verifikasi checksum yang bagus adalah rhash. Ini menciptakan file yang kompatibel dengan SFV, dan mengeceknya juga.

Mendukung md4, md5, sha1, sha512, crc32 dan banyak lainnya.

Selain itu dapat melakukan penciptaan rekursif (opsi -r) seperti md5deep atau sha1deep.

Last but not least Anda dapat memformat output dari file checksum; sebagai contoh:

rhash --md5 -p '%h,%p\n' -r /home/

mengeluarkan file CSV termasuk path lengkap file yang secara rekursif dimulai dengan /home direktori.

Saya menemukan sangat berguna bahkan opsi -e mengubah nama file dengan memasukkan crc32 sum ke dalam nama.

Anda dapat mengubah "md5sum" dengan "rhash" dalam contoh-contoh PhoenixNL72.


9
2018-05-27 09:34



Apa sebenarnya yang dilakukan '/ home /' di sini? Alat ini terlihat cukup bagus. - Andy Ibanez
Saya pikir itu kesalahan, itu pasti kesalahan bagi saya. The -p adalah format untuk output. Saya akan memperbaikinya. - pbhj


Berikut dua contoh yang lebih luas:

  1. Buat file md5 di setiap direktori yang belum memilikinya, dengan path absolut:

    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 
    
  2. Buat file md5 di setiap folder yang belum memilikinya: tidak ada jalur, hanya nama file:

    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 
    

Apa yang membedakan antara 1 dan 2 adalah cara file disajikan dalam file md5 yang dihasilkan.

Perintah melakukan hal berikut:

  1. Buat daftar nama direktori untuk folder saat ini. (Pohon)
  2. Urutkan daftar folder.
  3. Periksa di setiap direktori jika file @ md5sum.md5 ada. Output dilewati jika ada, Output Pengolahan jika tidak ada.
  4. Jika file @ md5Sum.md5 tidak ada, md5Sum akan menghasilkan satu dengan checksum semua file dalam folder. 5) Atur file @ md5Sum.md5 yang dihasilkan hanya untuk membaca.

Output dari seluruh skrip ini dapat dialihkan ke file (.....; selesai> test.log) atau disalurkan ke program lain (seperti grep). Output hanya akan memberi tahu Anda direktori mana yang dilewati dan yang telah diproses.

Setelah berhasil dijalankan, Anda akan berakhir dengan file @ md5Sum.md5 di setiap subdirektori dari direktori Anda saat ini

Saya beri nama file @ md5Sum.md5 sehingga akan terdaftar di bagian atas direktori dalam share samba.

Memverifikasi semua file @ md5Sum.md5 dapat dilakukan dengan perintah berikutnya:

find "$PWD" -name @md5Sum.md5 | sort | while read file; do cd "${file%/*}"; md5sum -c @md5Sum.md5; done > checklog.txt

Setelah itu Anda dapat meng-grep checklog.txt menggunakan grep -v OK untuk mendapatkan daftar semua file yang berbeda.

Untuk membuat ulang @ md5Sum.md5 di direktori tertentu, ketika Anda mengubah atau menambahkan file misalnya, hapus file @ md5Sum.md5 atau ganti namanya dan jalankan perintah generate lagi.


5
2017-07-31 17:00



Perintah # 1 menggunakan jalur lengkap: md5sum "$ {dir}" / * tidak mengambil file tersembunyi dimulai dengan titik. Obat apa saja? - user14654
Terlambat ke pesta, tetapi karena md5sum menginginkan nama file (tampaknya uhappy jika Anda memberikannya direktori) mungkin paling mudah untuk meminta bantuan: $ md5sum $ (cari "$ dir" -maxdepth 0 -type f) "- ketik f "menarik file reguler dan .hidden (juga, temukan memiliki banyak opsi, tetapi bisa sangat membantu). Hilangkan bagian "-maxdepth 0" jika Anda menginginkan semuanya secara rekursif. Catatan: ini rapuh jika nama file memiliki ruang tertanam, maka Anda dapat membaca tentang xargs dan -0 ( en.wikipedia.org/wiki/Xargs ) - jgreve