grep string do conteúdo do comando file e, em seguida, delete file

3

Eu tenho um grande lote de arquivos .docx, onde um certo número deles é lixo. Eu sei como identificar esses arquivos a partir do comando de arquivo, pois eles contêm a frase "Número de palavras: 161" da saída do arquivo cmd. Eu preciso excluir esses arquivos. Eu tenho o seguinte até agora,

file * | grep "Number of Words: 161"

que fornece uma saída semelhante a

19028409: CDF V2 Document, Little Endian, Os: Windows, Version 5.1, Code page: 1252, Author: author, Template: Normal, Last Saved By:  , Revision Number: 2, Name of Creating Application: Microsoft Office Word, Last Printed: Mon Dec 13 13:21:00 2010, Create Time/Date: Wed Dec 12 22:39:00 2012, Last Saved Time/Date: Wed Dec 12 22:38:00 2012, Number of Pages: 1, Number of Words: 161, Number of Characters: 923, Security: 0

em que o nome do arquivo é 19028409

Como posso excluir todas as instâncias desses arquivos? Também devo acrescentar que estou executando isso a partir do terminal MAC OS X

    
por user251482 15.01.2014 / 18:47

2 respostas

3

Tente isto:

for f in ./*docx; do file "$f" | grep -q "Number of Words: 161" && rm "$f"; done

Isso fará o loop de todos os arquivos .docx no diretório atual e os excluirá se o código de saída de grep for 0. grep retornará 0 se o arquivo atual corresponder à sequência pesquisada. O -q é apenas para suprimir a saída.

Para garantir que isso funcione como esperado, execute-o com printf primeiro:

for f in ./*docx; do 
 file "$f" | grep -q "Number of Words: 161" && 
   printf "%s\n" "rm $f"
done
    
por 15.01.2014 / 18:55
0

Desde que nenhum nome de arquivo tenha dois pontos:

IFS="\n" for f in $(file * | grep "Number of Words: 161" | sed 's/:.*$//'); do
 rm "$file"
done
    
por 15.01.2014 / 18:51