Você pode enviar a saída find (que listará todos os arquivos de seu interesse) para md5sum .
xargs é necessário para evitar a criação de um loop.
Para escrevê-lo em um comando:
find . -maxdepth 1 -size +30M -type f -print0 | xargs -0 md5sum
-
.diz "iniciar listando itens do diretório atual" -
-maxdepth 1especifica listar apenas arquivos neste diretório (não descer mais) -
-size +30Mespecifica listar apenas arquivos que excedam 30 megabytes de espaço (você também pode usarkeGsufixos, se necessário, leia mais sobre suas possibilidades emman find, se necessário) -
-type fevita listar diretórios - você não pode contarmd5sumpara um diretório -
-print0criafindnomes de arquivos separados com o byte nulo. Usamos isso porque tudo falha quando você coloca uma nova linha no nome do arquivo.
xargs vai pegar o material da entrada padrão (graças ao -0 flag ele tratará o byte nulo como separador de registro) e os alimentará como argumentos para md5sum .
Você também pode fazer isso sem o pipe, mas eu acho essa sintaxe confusa e eu prefiro canalizá-la para xargs :
find . -maxdepth 1 -size +30M -type f -execdir md5sum {} \;
E, como @David escreve nos comentários, você pode colocar + após o {} , ou seja, find . -maxdepth 1 -size +30M -type f -execdir md5sum {} + \; .
O que isso muda? md5sum pode ser chamado para dois arquivos de duas maneiras: md5sum file1; md5sum file2 ou md5sum file1 file2 . Sem o + você obtém a primeira opção, adicionar + resulta em executá-lo da segunda maneira. O benefício mais importante é a velocidade, pois md5sum é executado apenas uma vez. Pode não ser que benéfico para alguns programas, mas, em alguns casos, por exemplo, um programa pode ser executado em vários núcleos e acelerar o trabalho pelo fator de NUM_CPUS.
Sobre essa estranha sintaxe (de man find ):
-execdir command ;
Execute command;
trueif0status is returned. All following arguments to find are taken to be arguments to the command until an argument consisting of';'is encountered. The string'{}'is replaced by the current file name being processed everywhere it occurs in the arguments to the command, not just in arguments where it is alone, as in some versions of find. Both of these constructions might need to be escaped (with a'\') or quoted to protect them from expansion by the shell. See the EXAMPLES section for examples of the use of the-execdiroption. The specified command is run once for each matched file.