locate filename
find -name '*filename*'
echo **/*filename*
ls -ld **/*filename*
(Leia os principais termos e condições. Leia o manual para obter as letras miúdas.)
Listar o conteúdo de um diretório é uma espécie de recurso secundário ls
. A principal tarefa de ls
, que ocupa a maior parte de sua complexidade, é o ajuste fino da tela. (Consulte o manual e compare o número de opções relacionadas à escolha de quais arquivos exibir versus o número de opções que controlam quais informações exibir sobre cada arquivo e como a exibição é formatada. Isso é verdade para o GNU ls que você ' você encontrará no Linux e em outros sistemas com menos opções desde os primeiros dias.)
O modo padrão ls
é que, quando você passa um diretório, ele lista os arquivos nesse diretório. Se você passar qualquer outro tipo de arquivo (arquivo normal, link simbólico etc.), ele lista apenas esse arquivo. (Isso se aplica a cada argumento separadamente.) A opção -d
diz ls
para nunca descer para um diretório.
ls
possui uma opção -R
que diz para listar diretórios recursivamente. Mas é de aplicabilidade limitada e não permite muita filtragem na saída.
A primeira ferramenta a executar a correspondência de padrões é o próprio shell. Você não precisa de nenhum outro comando: basta digitar seus curingas e pronto. Isso é conhecido como globbing .
echo *filename*
Tradicionalmente, os curingas eram limitados ao diretório atual (ou ao diretório indicado:) echo /some/where/*filename*
. A *
corresponde a qualquer nome de arquivo ou qualquer parte do nome do arquivo, mas *.txt
não corresponde foo/bar.txt
. Os shells modernos adicionaram o padrão **/
que significa "neste diretório ou em qualquer diretório abaixo dele (recursivamente)". Com o bash, por motivos de compatibilidade histórica, esse recurso precisa ser ativado explicitamente com shopt -s globstar
(você pode colocar essa linha no seu ~/.bashrc
).
echo **/*filename*
O echo
comando apenas ecoa a lista de nomes de arquivos gerados pela parte de trás do escudo em você. Como uma exceção, se não houver um nome de arquivo correspondente, o padrão curinga permanecerá inalterado no bash (a menos que você defina shopt -s nullglob
; nesse caso, o padrão será expandido para uma lista vazia) e zsh sinalizará um erro (a menos que você defina setopt nullglob
ou setopt no_no_match
que faz com que o padrão permaneça inalterado).
Você ainda pode querer usar ls
para suas opções. Por exemplo, ls
pode dar indicações sobre a natureza ou as permissões do arquivo (diretório, executável etc.) por meio de cores. Você pode exibir a data, tamanho e propriedade do arquivo ls -l
. Veja o manual para muitas outras opções.
O comando tradicional para procurar um arquivo em uma árvore de diretórios é find
. Ele vem com muitas opções para controlar quais arquivos exibir e o que fazer com eles. Por exemplo, para procurar ficheiros cujo nome corresponde ao padrão *filename*
no diretório atual e seus subdiretórios e imprimir seus nomes:
find /some/dir -name '*filename*' -print
-print
é uma ação (a maioria das outras ações consiste em executar um comando no arquivo); se você não colocar uma ação, -print
está implícito. Além disso, se você não especificar nenhum diretório a percorrer ( /some/dir
acima), o diretório atual estará implícito. A condição -name '*filename'
diz para listar (ou agir) apenas os arquivos cujo nome corresponde a esse padrão; existem muitos outros filtros, como -mtime -1
os arquivos modificados nas últimas 24 horas. Às vezes, você pode omitir as aspas -name '*filename*'
, mas apenas se o curinga não corresponder a nenhum arquivo no diretório atual (veja acima). Em suma, a forma abreviada é
find -name '*filename*'
Outra ferramenta útil quando você sabe (parte de) o nome de um arquivo é locate
. Essa ferramenta consulta um banco de dados de nomes de arquivos. Em sistemas típicos, é atualizado todas as noites. A vantagem do locate
excesso find /
é que é muito mais rápido. Uma desvantagem é que suas informações podem ser obsoletas. Existem várias implementações locate
que diferem em seu comportamento em sistemas multiusuário: o locate
programa básico indexa apenas arquivos legíveis publicamente (convém executar o companheiro updatedb
para criar um segundo banco de dados que indexe todos os arquivos da sua conta); existem outras versões (mlocate, slocate) que indexam todos os arquivos e fazem com que o locate
programa filtre o banco de dados para retornar apenas os arquivos que você pode ver.
locate filename
Às vezes, você pensa que um arquivo é fornecido por um pacote em sua distribuição, sabe (parte) o nome do arquivo, mas não o nome do seu pacote, e gostaria de instalá-lo. Muitas distribuições fornecem uma ferramenta para isso. No Ubuntu, é apt-file search filename
. Para comandos equivalentes em outros sistemas, verifique o Pacman Rosetta .
ls
?