Como posso transformar a ferramenta 'file' em um predicado para 'find'?

2

Eu tenho algo como:

find . -type f -print0  | xargs -0 file | grep Matroska | cut -d: -f 1-1 | xargs rm

Eu quero algo como:

find . -type -f -filemagic "Matroska" -delete
    
por Vi. 18.08.2015 / 15:04

2 respostas

2

-exec de fato pode ser usado como um predicado. find(1) :

Execute command; true if 0 status is returned.

Então, este exemplo seria:

find . -type f -exec sh -c 'file "$0" | grep -q Matroska' '{}' ';' -and -delete

Obviamente, em vez de -delete , pode haver -ls ou -print0 ou mais predicados.

    
por 27.08.2015 / 20:33
3

Você pode executar a opção bash dentro de find com -exec e executar file dentro do shell, por exemplo:

find . -type f -execdir bash -c 'file "$0" | grep -q Matroska && rm "$0"' {} \;
    
por 18.08.2015 / 15:15