Saya menggunakan md5sum untuk menghasilkan nilai hash untuk file. Tetapi saya hanya perlu menerima nilai hash, bukan nama file.
md5=`md5sum ${my_iso_file}`
echo ${md5}
3abb17b66815bc7946cefe727737d295 ./iso/somefile.iso
Bagaimana saya bisa 'menelanjangi' nama file dan hanya tetap nilainya?
Jawaban:
Nah cara lain :)
sumber
md5=`md5sum < ${my_iso_file}`
Namun ini masih menampilkan "-" di akhir. Tetapi untuk perbandingan ini harus cukup.MD5 (/Users/hello.txt) = 24811012be8faa36c8f487bbaaadeb71
dan kode Anda kembaliMD5
.-
dengan menambahkan| awk '{print $1}'
akhir kode Anda =>md5sum < ${my_iso_file} | awk '{print $1}'
@ChristopheDeTroyerTugas array sederhana berfungsi ... Perhatikan bahwa elemen pertama
bash
array dapat diatasi dengan hanyaname
tanpa[0]
indeks, yaitu,$md5
hanya berisi 32 karakter dari md5sum.sumber
bash
, tetapi dapatkah Anda memberi tahu saya apakah array adalah fitur bash only atau standar shell?echo>file; for i in file; do md5=($(md5sum file)); echo $md5; done
- Seharusnya output68b329da9893e34099c7d8ad5cb9c940
echo ($(echo -n foo | md5sum))
tidak bekerja? Kesalahanbash: syntax error near unexpected token $(echo -n foo | md5sum)'
echo -n foo | md5sum
menampilkan 2 kata shell ke stdout :acbd18db4cc2f85cedef654fccc4a4d8
dan-
(the-
menunjukkan sumber sebagai stdin ). - Anda harus memberitahu pesta untuk menangkap mereka kata-kata ke dalam string, menggunakan Command Substitusi :$( command )
. -(
Kurung)
menghasilkan array bash dengan 2 elemen. Namun, Anda harus menetapkan konstruk array itu( … )
ke nama variabel; karenanya, menggunakan md5 sebagai nama array:md5=($(echo -n foo | md5sum))
. Anda belum menetapkan larik ke nama variabelAnda dapat menggunakan
cut
untuk membagi garis pada spasi dan hanya mengembalikan bidang seperti pertama:sumber
cut -c 1-32
md5sum
->sha256sum
tanpa mengingat jumlah karakter yang Anda butuhkan untuk "memotong".Di Mac OS X:
sumber
gmd5sum
daricoreutils
akan bekerja pada MacOS sepertimd5sum
pada jawaban lain yang disebutkan di sini.sumber
$()
(meskipun mereka tidak membahayakan) tetapi tentu membutuhkannya${}
.Satu arah:
Cara lain:
Cara lain:
(Jangan coba-coba dengan back-ticks kecuali Anda sangat berani dan sangat baik dengan backslash.)
Keuntungan dari solusi ini dibandingkan solusi lain adalah bahwa mereka hanya menjalankan
md5sum
dan shell, daripada program lain sepertiawk
ataused
. Apakah itu benar-benar penting maka merupakan pertanyaan terpisah; Anda mungkin akan kesulitan menemukan perbedaannya.sumber
Cara lain adalah dengan melakukan:
Cut akan membagi garis ke setiap ruang dan hanya mengembalikan bidang pertama.
sumber
sumber
Jika Anda perlu mencetaknya dan tidak memerlukan baris baru, Anda dapat menggunakan:
sumber
sumber
md5sum
menempatkan backslash sebelum hash jika ada backslash dalam nama file. 32 karakter pertama atau apapun sebelum spasi pertama mungkin bukan hash yang tepat. Itu tidak akan terjadi ketika menggunakan input standar (nama file akan adil -), jadi jawaban pixelbeat akan berfungsi, tetapi banyak orang lain akan membutuhkan menambahkan sesuatu seperti| tail -c 32
.sumber
Yah, saya punya masalah yang sama hari ini, tetapi mencoba untuk mendapatkan file md5 hash ketika menjalankan
find
perintah. Saya mendapat pertanyaan paling banyak dan membungkusnya dalam fungsi yang dipanggilmd5
untuk menjalankan perintah find. Misi bagi saya adalah menghitung hash untuk semua file dalam folder dan menampilkannya sebagaihash:filename
.Jadi, saya dapat beberapa bagian dari sini dan juga dari -exec fungsi shell?
sumber
Demi kelengkapan cara dengan sed menggunakan regex dan grup tangkap:
Ekspresi yang diatur adalah menangkap semua yang ada di grup hingga ruang tercapai. Agar grup tangkap berfungsi, Anda perlu menangkap semua yang ada di sed. (Lebih lanjut tentang kelompok sed dan kaputer di sini: https://stackoverflow.com/a/2778096/10926293 )
Sebagai pembatas dalam sed saya menggunakan titik dua karena mereka tidak valid dalam jalur file dan saya tidak perlu melarikan diri dari garis miring di filepath.
sumber
Cara lain:
sumber
sumber