find comando no Linux para localizar arquivos pdf

10

Meu objetivo é encontrar todos os arquivos pdf em uma máquina remota, então recorro ao comando útil find . Então eu digito

find ~ *.pdf
ou
find ~ "*.pdf"
e não recebo nada. Eu faço o mesmo na minha máquina e não recebo nada. Faço uma pesquisa regular no menu da minha máquina e encontro alguns arquivos em pdf. Alguém poderia me dizer o que estou fazendo errado?     
por akira 26.05.2010 / 01:27

7 respostas

29

find está longe de ser inútil. Você simplesmente não está usando isso corretamente.

tente:

find . -type f -iname '*.pdf'

    
por 26.05.2010 / 01:30
9

Dê uma olhada na documentação dos findutils . O comando find é incrivelmente poderoso e, conseqüentemente, tem uma interface um pouco complicada. Você pode fazer o que quiser com:

find . -type f -iname '*.pdf' 

O comando acima significa "localizar dentro. para entradas do tipo arquivo com um nome que não diferencia maiúsculas de minúsculas que corresponde a * .pdf (e imprimir o nome de tais correspondências)". O comando find pode realmente ser usado para executar comandos nos arquivos encontrados (em vez de ou além de imprimir os nomes dos arquivos). Para seus objetivos, porém, você pode se sentir mais confortável com o comando locate , que - supondo que você construiu o banco de dados de localização usando updatedb - torna muito fácil para encontrar arquivos. Por exemplo:

locate '*.pdf'

Você também descobrirá que o comando locate é normalmente mais rápido que o comando find, já que o locate usa um índice de nomes de arquivos (o banco de dados de localização), enquanto que o find percorrerá a hierarquia para cada chamada.

    
por 26.05.2010 / 01:43
6

Você está simplesmente sem o predicado que diz o que você está pesquisando (por exemplo, -name .)

Para encontrar no diretório inicial por nome:

find ~ -name \*.pdf

Observe que o caractere curinga * precisa ser ignorado para que o shell não o interprete antes que o Google Find o encontre. Usar '*.pdf' e "*.pdf" terá o mesmo efeito que \*.pdf .

Para encontrar insensibilidade a maiúsculas e minúsculas:

find ~ -iname \*.pdf

Para limpar os resultados apenas para arquivos (a expressão de nome provavelmente cuidará disso para você, mas caso você tenha diretórios com nomes estranhos):

find ~ -type f -iname \*.pdf

Para certificar-se de que encontrar segue os links simbólicos (eu geralmente quero fazer isso quando estou fazendo pesquisas):

find ~ -follow -type f -iname \*.pdf

Para fazer algo com os arquivos encontrados: você pode fazer o dump em um arquivo usando o redirecionamento stdout (por exemplo, alinhar em > filename no final) ou usar a opção -exec para executar um comando (consulte a página man para detalhes). O último executa um comando em cada arquivo de cada vez, no entanto. Geralmente, é mais rápido deixar o comando xargs passar seus arquivos encontrados como argumentos para outro comando, todos de uma vez ou grandes blocos por vez. Por exemplo, para consultas ad-hoc (mas não indexadas) através de arquivos de cabeçalho:

find ~ -follow -type f -name \*.h | xargs grep -nH "identifier"

E uma extensão final, para que o último comando funcione corretamente se você tiver arquivos & diretórios com espaços neles:

find ~ -follow -type f -name \*.h -print0 | xargs -0 grep -nH "identifier"
    
por 26.05.2010 / 02:01
3

Dê uma olhada neste tutorial

acho que o que você quer fazer é

find . -name "*.pdf"
    
por 26.05.2010 / 01:34
0

Eu costumava combinar o achado com o grep como

encontre. . | grep -i ".pdf"

talvez não seja eficiente, mas funciona bem.

    
por 26.05.2010 / 06:30
0

Encontre os arquivos dos quais você precisa fazer o download nos últimos x dias

find ~ -type f -iname '*.pdf' -mtime -1

você encontrará arquivos em PDF no diretório ~ da sua casa e abaixo com extensão .pdf , independentemente de maiúsculas e minúsculas (isso é em iname ) e modificado até 1 dia atrás, porque eu adicionei mtime -1 ; se você colocar -60 em mtime, serão os últimos 60 dias.

    
por 05.11.2014 / 10:35
0

Para executar uma pesquisa nos arquivos "encontrados", há esta construção:

find <dir> -type f -iname <name> -exec grep -H <string> {} \;

O comando exec deve terminar com o escape ";" e o -H é necessário para o grep imprimir o caminho do arquivo, além da linha dentro do arquivo onde "string" é.

    
por 12.06.2015 / 18:41

Tags