md5sum para cada arquivo (com ll)

1

Eu quero uma saída assim: name size e hash :

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

Para name e size , só tenho

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

Mas como posso obter hash para cada arquivo? Eu tentei:

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

Mas eu recebo apenas um hash.

    
por Vitaly Zdanevich 31.10.2015 / 22:24

1 resposta

5

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

for f in * .*; do
  [ -f "$f" ] && \
    printf "%s %s %s\n" "$f" $(du -h -- "$f" | cut -f1) $(md5sum -- "$f" | cut -d' ' -f1)
done
  • O loop for é executado por 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 -f1 o segundo é o tamanho (legível por humanos), mas não o nome do arquivo, cut corta todos exceto o primeiro campo ausente
    • md5sum -- "$f" | cut -d' ' -f1 third é a soma MD5, mas sem o nome do arquivo.
por 31.10.2015 / 22:43