Classifique a saída do find antes da canalização para openssh

3

Estou usando esse comando para gerar recursivamente um SHA-512 hash para cada arquivo em uma hierarquia de diretórios :

find . -type f -exec openssl sha512 {} \;

Gostaria de ordenar os arquivos em ordem lexicográfica antes de gerar os hashes.

Eu posso usar sort assim:

find . -type f | sort

mas não sei como encaminhar a lista de arquivos classificados para openssl . Eu tentei isso:

find . -type f | sort | openssl sha512

mas isso gera um único hash de toda a saída de sort , enquanto eu quero um hash para cada arquivo individual.

find em algumas versões do bash inclui uma opção -s ("Causa find para percorrer as hierarquias de arquivos em ordem lexicográfica"), mas isso não está disponível na minha versão de find .

Muito obrigado antecipadamente pela sua ajuda!

    
por TachyonVortex 25.11.2012 / 15:50

2 respostas

5

Você pode usar xargs para conseguir o que deseja.

find . -type f -print0 | sort -z | xargs -0 -n1 openssl sha512

A opção -n1 diz ao xargs para permitir que apenas um argumento seja fornecido ao comando openssl . As opções -print0 , -z e -0 impedem que o pipeline seja interrompido se houver caracteres "problemáticos" (como uma nova linha incorporada) nos nomes de arquivos.

    
por 25.11.2012 / 16:23
1

Pipe para xargs -L 1 openssl sha512, assim:

find . -type f | sort | xargs -L 1 openssl sha512

xargs pega as saídas e as executa como a linha de comando do programa, o "-L 1" limita-as a uma linha por execução.

    
por 25.11.2012 / 16:21