Como encontrar um diretório no linux?

453

Eu tenho um VPS com o Suse Linux 10.3 .

Eu entrei via SSH / putty e estou tentando encontrar onde estão meus arquivos da web.

Como estou carregando via FTP em um diretório chamado httpdocs , presumo que esse diretório exista em algum lugar.

Minhas pesquisas no google me ensinaram a fazer isso, acesse meu diretório raiz e digite:

find httpdocs -type d

mas diz " Não existe esse arquivo ou diretório ".

Como posso encontrar este diretório?

Edward Tanguay
fonte
4
Caso alguém esteja se perguntando, o comando na pergunta localiza todos os diretórios ( -type d) na entrada do diretório httpdocs(em relação ao diretório de trabalho atual, geralmente mas não necessariamente um diretório). Ele falha com a mensagem de erro porque não há entrada de diretório httpdocsno diretório raiz do sistema e, portanto, não há ponto de partida para uma pesquisa.
Daniel Beck

Respostas:

609

Isto é:

find / -type d -name 'httpdocs'

o primeiro parâmetro "/" é onde procurar, neste caso "/" é o sistema inteiro.

-name poderia ser -iname para ignorar maiúsculas e minúsculas

also -type não é obrigatório

use: man find para mais opções

OldJim
fonte
2
localizar / -name 'httpdocs' funciona muito bem obrigado
Edward Tanguay
91
Pode não ser importante para pesquisas simples, mas para comandos find mais complexos, é importante notar que as coisas são avaliadas na ordem em que estão na linha de comando. Portanto, convém ter o -type d (somente diretórios) antes de -name, para acelerar as coisas. Novamente, isso pode não importar muito aqui, mas, ao entrar em pesquisas mais complexas, pode melhorar consideravelmente a velocidade da pesquisa.
Dominic Eidson
14
Na verdade, o -nameteste é mais rápido que a maioria dos outros testes, pois -nameé comparado com a listagem do diretório, que já está carregada do disco, e os outros testes precisam executar um stat(2)para obter informações sobre o arquivo. Após a primeira stat()chamada para um arquivo, um testes subseqüentes obter de memória, por exemplo: -type f -mtime -10.
Arcege
24
Se você deseja realizar uma busca em todo o sistema de arquivos, especialmente em um servidor, geralmente é bom usá-la nicepara que a busca não nice find / ...
consuma
16
Eu acrescentaria 2> / dev / null para evitar que meus resultados de pesquisa fiquem ocultos em todos os erros de permissão.
Jason Yeo
63

Este comando deve fornecer o que você está procurando:

find / -type d -name httpdocs

que procurará na raiz do servidor diretórios com o nome de httpdocs ou, se você quiser apenas pesquisar no diretório atual, substitua '/' por '.'

Outro comando que você pode tentar é localizar, você faria algo como:

locate httpdocs
Zypher
fonte
localize httpdocs me diz "localize: comando não encontrado"
Edward Tanguay
4
Para aqueles que usam o comando "localizar" (considerando que ele existe no seu sistema), verifique se o banco de dados pesquisado está atualizado; normalmente algum trabalho cron cuida dele. Caso contrário, execute "updatedb" (sendo root). Em seguida, execute o "localize <somefile>" necessário. Isso é necessário para encontrar arquivos / diretórios adicionados recentemente.
David Ramirez
+1 para localizar. É muito mais rápido, mas apenas se o índice estiver atualizado. Felizmente, algo como "httpdocs" não muda de local com frequência. Se você planeja pesquisar repetidamente arquivos em uma máquina, vale a pena os minutos necessários para configurar o trabalho cron cron atualizado.
Doug Harris
1
Além disso, em muitos casos, o local retornará muitos resultados, pois todos os arquivos de 100k desse diretório serão exibidos. Nesse caso específico, se cada usuário tiver seus próprios httpdocs com 100 ou 1000 arquivos, o resultado que o OP deseja provavelmente será perdido.
Jistanidiot
+1 para localizar ... Eu mantenho meu banco de dados atualizado para que este comando seja muito útil ... Ótima idéia.
Nicorellius
27
find / -type d -name httpdocs 2> /dev/null

Isso eliminará todas as mensagens de erro que você provavelmente (lerá sempre) quando não fizer isso como usuário root. Recomendaria fazê-lo desta maneira.

user2940456
fonte
2
A 2> /dev/nullopção é muito útil. Caso contrário, pode ser difícil ver os resultados desejados ...
Gottlieb Notschnabel
13

É importante conhecer o parâmetro -iname para pesquisar padrões "sem distinção entre maiúsculas e minúsculas" e o uso de curingas: *,?, Etc.

Dois exemplos:

Pesquise todos os arquivos de / root que contenham a sequência "Linux", sem distinção entre maiúsculas e minúsculas:

find  /root -type f -iname "*linux*"

Pesquise todos os diretórios de / root que contenham a sequência "Linux", sem distinção entre maiúsculas e minúsculas:

find  /root -type d -iname "*linux*"

Extraído daqui:

http://www.sysadmit.com/2015/12/linux-buscar-ficheros-directorios-con-find.html

LunaSeven
fonte
Esta pergunta é sobre como encontrar um diretório cujo nome você conhece, não como encontrar um diretório cujo nome você conhece (aproximadamente). Além disso, a resposta aceita (de mais de 6 anos atrás!) Já menciona -inamecomo uma alternativa que não diferencia maiúsculas de minúsculas -name.
G-Man
9

você quase o tem. a sintaxe correta seria:

find / -type d -name httpdocs

O diretório provavelmente está em /var/www/

chrisbunney
fonte
que me diz "caminhos deve preceder a expressão"
Edward Tanguay