encontra X mas exclui estes?

1

Original encontrar o que funciona no OS X, mas não agora no Ubuntu 16.04

find $HOME -type f -name "*.tex" -exec grep -l "masi" {} + |  vim -R -

(versão simplificada ainda; você pode omitir vim part mas mostra aqui que estou lidando com os resultados)

No Ubuntu 16.04, recebo a permissão negada -mensagens. Quero excluir as mensagens de permissão negada da minha pesquisa. na verdade, esses arquivos parecem ser principalmente .dotFiles

drwx------  2 root root  4096 touko 29 23:59 .gvfs

Não consigo combinar o código com a minha pesquisa. Portanto, encontre todos, exceto os arquivos com permissão negada ( ! -readable -prune ). Pseudocódigo

find $HOME -type f -name "*.tex" \ 
  -o ! -readable -prune -o \    
  -exec grep -l "masi" {} + 

mas parece expandir muito, dando uma lista enorme etc mensagens

grep: /home/masi/.conda/envs/my_root/src/linux-headers-4.2.0-27/include/linux/power: Is a directory'
...

Tão diferente do que a coisa funciona no OS X. Eu tentei também sem sucesso -perm a+r em vez da estrutura de análise, mas ainda recebo a permissão negada -mensagens.

Revendo a resposta de Gilles

Minha solução final é

find $HOME +perm 0666 -type f -name ...

porque readable não é POSIX e não funciona no OSX.

Como você pode combinar a pesquisa e excluir na pesquisa?

    
por Léo Léopold Hertz 준영 02.06.2016 / 01:45

1 resposta

3

A resposta para a pergunta que você fez tem a ver com a álgebra booleana e a precedência do operador. Seu comando find diz:

  • Se for um arquivo normal e o nome corresponder a *.tex , não faça nada.
  • Caso contrário, se não for legível, pule-o sem recursão.
  • Caso contrário, execute grep .

Coloque o teste de legibilidade primeiro. Isso fará com que os testes correspondentes aos arquivos em que você está interessado sejam anexados ao comando que você deseja executar neles.

find ~ ! -readable -prune -o \    
       -type f -name "*.tex" -exec grep -l "masi" {} + 

Como alternativa, já que você parece estar no Linux e no OSX, use os recursos de recursão do GNU grep.

grep -s -r --include='*.tex' -l 'masi' ~

Você não deve ter arquivos ilegíveis em seu diretório pessoal. Ter arquivos pertencentes ao root indica que você executou alguns programas como root (provavelmente através de sudo ) e deixou alguns arquivos de estado gerados automaticamente ou arquivos temporários por trás.

~/.gvfs é a raiz da hierarquia de pontos de montagem GVFS e definitivamente deve pertencer a você, e não a root, caso contrário montagens do GVFS que você tentar fazer (de mídia removível, unidades de rede, etc.) não funcionarão. Execute sudo rmdir ~/.gvfs . Se você não puder excluí-lo porque ainda está em uso, mova-o para fora do caminho ( sudo mv ~/.gvfs ~ / .gvfs.root ') e livre-se dele quando o que estiver montado atualmente for desmontado.

    
por 02.06.2016 / 02:01

Tags