md5sum para cada arquivo (com ll)

md5sum para cada arquivo (com ll)

Eu quero uma saída como esta: name size e hash:

myfile.txt 222M 24f4ce42e0bc39ddf7b7e879a
mynewfile.txt 353M a274613df45a94c3c67fe646

Pois namee sizesó eu tenho

ll -h | awk '{print $9,$10,$11,$12,$5}'

Mas como posso obter hashcada arquivo? Tentei:

ll -h | awk '{print $9,$10,$11,$12,$5}' | md5sum

Mas recebo apenas um hash.

Responder1

Você não deve analisar ls, em vez disso use isto:

for f in * .*; do
  [ -f "$f" ] && \
    printf "%s %s %s\n" "$f" $(du -h -- "$f" | cut -f1) $(md5sum -- "$f" | cut -d' ' -f1)
done
  • O forloop é executado em todos os arquivos e diretórios no diretório atual.
    • [ -f "$f" ]verifica se é um arquivo normal
    • printf "%s %s %s\n"imprime os argumentos no formato desejado.
    • "$f"o primeiro argumento é o nome do arquivo
    • du -h -- "$f" | cut -f1o segundo é o tamanho (legível por humanos), mas não o nome do arquivo, cutcorta todos, exceto o primeiro campo
    • md5sum -- "$f" | cut -d' ' -f1a terceira é a soma MD5, mas sem o nome do arquivo.

informação relacionada