find
está longe de ser inútil. Você simplesmente não está usando isso corretamente.
tente:
find . -type f -iname '*.pdf'
Meu objetivo é encontrar todos os arquivos pdf em uma máquina remota, então recorro ao comando útil find
. Então eu digito
find ~ *.pdfou
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?
find
está longe de ser inútil. Você simplesmente não está usando isso corretamente.
tente:
find . -type f -iname '*.pdf'
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.
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"
Dê uma olhada neste tutorial
acho que o que você quer fazer é
find . -name "*.pdf"
Eu costumava combinar o achado com o grep como
encontre. . | grep -i ".pdf"
talvez não seja eficiente, mas funciona bem.
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.
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" é.