Como procurar arquivos .tex?

0

Eu quero pesquisar methyldopa em arquivos .tex pela pesquisa do Ubuntu. Eu apenas incluí os arquivos na minha pasta Dropbox, o que pode confundir a ferramenta de busca do Ubuntu. No entanto, vejo esses arquivos em arquivos recentes da ferramenta de pesquisa. Eu também pesquiso sem sucesso methyldopa .tex , mas também estou fazendo sem sucesso apenas methyldopa e limitando Type para Documents, Folders e Other.

Eu corro sudo updatedb e ainda procuras sem sucesso.

Como você pode pesquisar arquivos .tex no Ubuntu 14.04 LTS?

    
por Léo Léopold Hertz 준영 20.12.2015 / 14:28

4 respostas

0

Use o script que eu chamo de haetex para a pesquisa em todo o sistema. Coloque o script em /usr/local/bin/ como apenas haetex com tais permissões / proprietários; o que você pode fazer por sudo chmod 755 /usr/local/bin/haetex

-rwxr-xr-x  1 root root  932 Jun 21 17:16 haetex

Características

  • use find -L ... -exec fgrep -l ... 2>/dev/null porque ele ocupa um espaço maior no sistema que find -H ... -exec fgrep -l ... , sem dar erros sobre links simbólicos defeituosos
  • Acho que fgrep cabe aqui melhor que grep
  • /dev/null é necessário no segundo conjunto de comandos porque estamos usando find -L , pois queremos incluir todos os links simbólicos e executá-los e não excluir nada na pesquisa

Arquivo haetex

#!/bin/bash
# $Id: haetex, v 0.01 2016/5/4 17:33:12 Masi $
# v 0.011 2016/7/1 08:28:11 Masi $ [location], show filename when one file, search symlinks by default 
# v 0.012 2016/8/16 19:21:00 Masi $ fix for find: ‘/home/masi/LOREM’: Too many levels of symbolic links


# Search .tex files
#
# .vimrc
# http://vi.stackexchange.com/q/7782/2923
#
# http://unix.stackexchange.com/a/287344/16920

usage() {
# a function that prints an optional error message and some help.
# and then exits with exit code 1
[ -n "$*" ] && printf "%s\n" "$*" > /dev/stderr

cat <<__EOF__
Usage:
      $0 [-h] [ -i ] [ location ] [ word(s) ] [ -x example_data ]

-i    Ignore case
-x    The example option, requires an argument.
-h    This help message.

Detailed help message here
__EOF__

exit 1
}

case_option=''
case_example=''

while getopts "hix:" opt; do
    case "$opt" in
        h) usage ;;
        i) case_option='-i' ;;
        x) case_example="$OPTARG" ;;
        *) usage ;;
    esac
done
shift $((OPTIND-1))

# include symlinks
# http://unix.stackexchange.com/a/293147/16920
# http://unix.stackexchange.com/a/303694/16920
# http://unix.stackexchange.com/a/304027/16920
find -L "$1" -xtype f -name "*.tex" \
   -exec fgrep -l $case_option "$2" {} + 2>/dev/null | vim -R -
# The /dev/null makes sure 'fgrep' prints a filename even when it has only a single file to search. 

# TODO +perm 0666 not working in Ubuntu 16.04; instead fix the origin of the permission denied alerts
#sudo gfind /Users/masi/Math/ -type d -exec chmod 0755 {} \;
#sudo gfind /Users/masi/Math/ -iname '*.docx' ! -readable -exec chmod 0644 {} \;

# TODO remove -l but make opening file only filename in Vim

# TODO less -s -M +Gg - Less as frontend with selection possibility? Maybe with GNU Screen

Selecione links no modo visual. Pressione Enter (= líder) + g + t no modo visual. Saída: arquivos nas guias. Então você redireciona a saída para o Vim. Esperado $HOME/.vimrc

"" Mapleader is space now from \ 
let mapleader=" "
"" Quick tabs - Go to tab by number 
noremap <leader>1 1gt
noremap <leader>2 2gt
noremap <leader>3 3gt
noremap <leader>4 4gt
noremap <leader>5 5gt
noremap <leader>6 6gt
noremap <leader>7 7gt
noremap <leader>8 8gt
noremap <leader>9 9gt
noremap <leader>0 :tablast<CR>
"" Go to last active tab 
au TabLeave * let g:lasttab = tabpagenr()
nnoremap <C-Left> :tabprevious<CR>
nnoremap <C-Right> :tabnext<CR>

"" http://vi.stackexchange.com/a/7787/2923 
function! OpenSelectionAsTabs() range
    let tabnr = tabpagenr()
    for line in range(a:firstline, a:lastline)
        "" to allow whitespaces in names http://vi.stackexchange.com/a/7865/2923
        execute "tabedit " . fnameescape(getline(line))
        execute "tabp"
    endfor
endfunction

nnoremap <leader>gf :'<,'>call OpenSelectionAsTabs()<CR>
vnoremap <leader>gf :call OpenSelectionAsTabs()<CR>

Pressione Space + [1-9] para navegar pelas guias no Vim.

Limitações Conhecidas: nenhuma

Sistemas: Ubuntu 14.04, Ubuntu 16.04, Debian 8.5, ...
Hardware: Asus Zenbook UX303UA

    
por Léo Léopold Hertz 준영 21.06.2016 / 16:18
2

Embora você esteja procurando uma solução de GUI, gostaria de compartilhar uma solução de linha de comando, porque acho que é bastante prática e fácil de usar:

tl; dr:

  • Use grep -w methyldopa *.tex | cut -d":" -f1 se todos os arquivos estiverem no mesmo diretório.
  • Use find -name "*.tex" -exec grep -H -w methyldopa {} \; | cut -d":" -f1 em um diretório, onde todos os arquivos que eu quero encontrar estão em subdiretórios.
  • Editar: Caminho mais curto (créditos para @ A.B.): grep -rwl methyldopa | grep .tex

versão longa com explicações:

Primeiro caso:

Todos os arquivos que você deseja pesquisar estão no mesmo diretório.
Esse é o cenário mais fácil. Você pode simplesmente usar

grep -w methyldopa *.tex | cut -d":" -f1 

para encontrar todos os arquivos .tex contendo methyldopa .

Explicação:
Conteúdo do diretório e arquivo:

file1.txt
file2.txt
file3.list

#file1.txt
foo
bar
foobar

#file2.txt
foo
foobar
1337

#file3.list
foo
bar
foobar

Agora, você pode usar grep foo * para pesquisar foo em todos os arquivos. Isto é o que você vai conseguir:

file1.txt:foo
file1.txt:foobar
file2.txt:foo
file2.txt:foobar
file3.list:foo
file3.list:foobar

Usar a opção -w impedirá a localização de foobar :

grep -w foo *

file1.txt:foo
file2.txt:foo
file3.list:foo

Se você quiser restringir sua pesquisa a arquivos com final especial, faça o seguinte:

grep -w foo *.txt

file1.txt:foo
file2.txt:foo

Por último, mas não menos importante, você pode canalizar os resultados para um comando cut para extrair apenas os nomes de arquivos ( -d":" define o separador de campo como : , -f1 retorna o primeiro campo de cada linha):

grep -w foo *.txt | cut -d":" -f1

file1.txt
file2.txt

Segundo caso:

Seus arquivos estão em diretórios diferentes. Nesse caso, você deve usar find para encontrar os arquivos primeiro:

find -name "*.txt" -exec grep -H -w foo {} \; | cut -d":" -f1

Explicação:

find -name "*.txt" procura por arquivos que terminem com .txt em seu diretório atual e em todos os subdiretórios. Você pode usar algo como find ~/Documents/ -name "*.txt" para começar a pesquisar em ~/Documents .

-exec grep -H -w foo {} \; procura por foo em cada arquivo que foi encontrado e retorna algo assim (o sinal -H garante que o nome do arquivo seja impresso):

./testdir/file2.txt:foo
./testdir/file1.txt:foo

Como no primeiro caso, | cut -d":" -f1 corta os nomes dos arquivos da saída.

    
por Wayne_Yux 20.12.2015 / 15:39
2

Para uma solução gráfica (e mais poderosa, quando ela funciona corretamente - o que é na maioria das vezes) é instalar recoll .

Você precisará instalá-lo usando o PPA --- observe as instruções de download (navegue até a parte dos sistemas Ubuntu).

Depois de ter instalado, escolha um tipo de indexação (eu faço o meu overnight f ou isso ainda problema não resolvido --- que provavelmente é devido a alguma configuração estranha no meu sistema), você tem uma ferramenta muito poderosa para localizar arquivos em seu sistema (até mesmo conteúdo de arquivos como planilha ODS ou arquivos compactados ou coisas semelhantes).

No seu caso, basta ligar para a interface do Recoll:

(Euusei"puente" como termo de pesquisa porque não tenho methyldopa por aí ;-)) --- a pesquisa está escrita no recoll query language. .

    
por Rmano 20.12.2015 / 20:35
0

Eu sugiro usar o Recoll para uma pesquisa indexada com uma interface gráfica e uma funcionalidade de visualização! Está nos repositórios oficiais, fáceis de usar e muito poderosos.

    
por variona 20.12.2015 / 14:34

Tags