Używam md5sum do wygenerowania wartości skrótu dla pliku. Ale muszę otrzymać tylko wartość skrótu, a nie nazwę pliku.
md5=`md5sum ${my_iso_file}`
echo ${md5}
3abb17b66815bc7946cefe727737d295 ./iso/somefile.iso
Jak mogę „usunąć” nazwę pliku i zachować tylko wartość?
Odpowiedzi:
Cóż w inny sposób :)
źródło
md5=`md5sum < ${my_iso_file}`
Jednak to nadal wyświetla "-" na końcu. Ale do porównań to powinno wystarczyć.MD5 (/Users/hello.txt) = 24811012be8faa36c8f487bbaaadeb71
i twój kod wracaMD5
.-
, dodając| awk '{print $1}'
koniec swojego kodu =>md5sum < ${my_iso_file} | awk '{print $1}'
@ChristopheDeTroyerProste przypisanie tablicy działa ... Zauważ, że pierwszy element
bash
tablicy może być adresowany tylko przezname
bez[0]
indeksu, tzn.$md5
Zawiera tylko 32 znaki sumy md5.źródło
bash
, ale czy możesz mi powiedzieć, czy tablica jest tylko funkcją bash, czy jakimś standardem powłoki?echo>file; for i in file; do md5=($(md5sum file)); echo $md5; done
- Powinien68b329da9893e34099c7d8ad5cb9c940
echo ($(echo -n foo | md5sum))
nie działa? Błędy usuniętebash: syntax error near unexpected token $(echo -n foo | md5sum)'
echo -n foo | md5sum
wyprowadza 2 słowa powłoki na stdout :acbd18db4cc2f85cedef654fccc4a4d8
i-
(-
wskazuje źródło jako stdin ). - Musisz powiedzieć bash , aby uchwycić te słowa na sznurku, używając polecenia Zmiana :$( command )
. -(
Nawiasy)
tworzą tablicę bash z 2 elementami. Jednak musisz przypisać tę konstrukcję tablicową( … )
do nazwy zmiennej; W związku z tym, przy użyciu MD5 jak nazwa tablicy:md5=($(echo -n foo | md5sum))
. Nie przypisałeś tablicy do nazwy zmiennejMożesz użyć,
cut
aby podzielić linię na spacje i zwrócić tylko pierwsze takie pole:źródło
cut -c 1-32
md5sum
->sha256sum
bez pamiętania, jaką ilość znaków trzeba „wyciąć”.W systemie Mac OS X:
źródło
gmd5sum
zcoreutils
działałby na MacOS, jakmd5sum
w innych wymienionych tutaj odpowiedziach.źródło
$()
(chociaż nie szkodzą), ale z pewnością potrzebujesz ich wokół${}
.Jednokierunkowa:
Inny sposób:
Inny sposób:
(Nie próbuj tego z back-tickami, chyba że jesteś bardzo odważny i bardzo dobry w backslashach.)
Zaletą tych rozwiązań w stosunku do innych rozwiązań jest to, że wywołują one tylko
md5sum
i powłokę, a nie inne programy, takie jakawk
lubsed
. Czy to rzeczywiście ma znaczenie, to oddzielna kwestia; prawdopodobnie trudno byłoby zauważyć różnicę.źródło
Innym sposobem jest:
Wytnij podzieli linię na każdą spację i zwróci tylko pierwsze pole.
źródło
źródło
Jeśli chcesz go wydrukować i nie potrzebujesz nowego wiersza, możesz użyć:
źródło
źródło
md5sum
umieszcza ukośnik odwrotny przed hashem, jeśli w nazwie pliku występuje ukośnik odwrotny. Pierwsze 32 znaki lub cokolwiek przed pierwszą spacją może nie być prawidłowym hashem. Nie stanie się to przy standardowym wejściu (nazwa pliku to po prostu -), więc odpowiedź pixelbeat będzie działać, ale wiele innych będzie wymagało dodania czegoś takiego| tail -c 32
.źródło
Cóż, miałem dzisiaj ten sam problem, ale próbowałem uzyskać hash pliku md5 podczas uruchamiania
find
polecenia. Otrzymałem najczęściej głosowane pytanie i opakowałem je w funkcję wywoływanąmd5
do uruchomienia w poleceniu find. Misją dla mnie było obliczenie skrótu dla wszystkich plików w folderze i wyprowadzenie go jakohash:filename
.Więc mam kilka kawałków stąd, a także z funkcji find -exec?
źródło
Ze względu na kompletność sposób z sedem przy użyciu wyrażenia regularnego i grupy przechwytywania:
Wyrażenie regularare obejmuje wszystko w grupie, aż do osiągnięcia odpowiedniej przestrzeni. Aby uzyskać pracę w grupie, musisz przechwycić wszystko w sed. (Więcej o grupach sed i caputer tutaj: https://stackoverflow.com/a/2778096/10926293 )
Jako separator w sed używam dwukropków, ponieważ nie są one prawidłowe w ścieżkach plików i nie muszę uciekać przed ukośnikiem w ścieżka pliku.
źródło
Inny sposób:
źródło
źródło