Os arquivos ODT são, na verdade, arquivos Zip (consulte link ) deve ser capaz de usar o comando zipgrep
com algo parecido com isto:
find ~/sandbox -name "*.odt" -type f -print0 | xargs -0 zipgrep GWT
Eu estou em um diretório pai e quero procurar por quaisquer arquivos ODT (LibreOffice Writer) que contenham a frase "GWT" neles.
Estou no desktop do Ubuntu 12.04. Do terminal:
myUser@myMachine:~/sandbox$ pwd
/home/myUser/sandbox
myUser@myMachine:~/sandbox$ ls
cloudflip doctrang eclipse lookslike scripts squirrel warlib
Todos esses objetos do sistema de arquivos ( eclipse
, scripts
, etc.) são pastas.
myUser@myMachine:~/sandbox$ grep -i -r "GWT" *.odt
grep: *.odt: No such file or directory
Onde estou indo ary aqui? Obrigado antecipadamente!
Os arquivos ODT são, na verdade, arquivos Zip (consulte link ) deve ser capaz de usar o comando zipgrep
com algo parecido com isto:
find ~/sandbox -name "*.odt" -type f -print0 | xargs -0 zipgrep GWT
Supondo que você use o Bash 4, faça o seguinte:
shopt -s globstar
grep -i GWT **/*.odt
shopt -u globstar
Quando a opção de shell globstar é definida, ** corresponde recursivamente a todos os subdiretórios do diretório atual. O segundo comando shopt desabilita o comando; este passo é opcional.
Como o @vanthome ressalta, usar os arquivos ODT não ajuda, já que eles são realmente compactados. Existem dois inconvenientes:
O seguinte pode alcançar os resultados desejados:
shopt -s globstar
for file in **/*.odt; do
unzip -c "$file" | grep -iq GWT && echo "$file"
done
shopt -u globstar
O loop para passa por todos os arquivos ODT em todos os subdiretórios. Para cada arquivo encontrado, ele descompacta seu conteúdo para STDOUT. Então, o grep procura a string desejada sem produzir nada ( -q
). Se uma correspondência for encontrada, o grep retornará 0 e o comando depois que o AND lógico ( &&
) for executado, então o nome do arquivo será ecoado no terminal.
Tags grep linux ubuntu-12.04 terminal