Como encontrar arquivos e diretórios no Linux

Nos sistemas operacionais Linux, o comando find pode ser usado para procurar arquivos e diretórios no seu computador. Para continuar, selecione um link da lista a seguir ou passe por cada seção em ordem.

Nota: Para usar o find, comece abrindo uma sessão de terminal para acessar a linha de comando.

Funcionalidade básica do find

Executar a localização sem opções produzirá uma lista de todos os arquivos e diretórios dentro e abaixo do diretório de trabalho. Por exemplo, se o seu diretório de trabalho for / home / hope / Documents, o resultado da execução será o seguinte:

  • Todos os arquivos em / home / hope / Documents .
  • Cada subdiretório em / home / hope / Documents .
  • Cada arquivo em cada um desses subdiretórios.

Vamos ver isso em ação. Primeiro, vamos verificar nosso diretório de trabalho usando o comando pwd:

pwd

 / home / hope / Documentos 

Agora vamos executar encontrar sem opções:

encontrar

 . ./imagens ./images/hp/images/hp/snape.jpg/images/hp/harry.jpg/images/memes/images/memes/winteriscoming.jpg/images/memes/goodguygary.JPG. /images/memes/picard.jpg ./gimp-2.8.16.tar.bz2 ./hp-fanfic ./hp-fanfic/malfoys-revenge.doc ./hp-fanfic/weekend-at-hagreds.doc ./ hp-fanfic / dumbledores-lament.doc ./archlinux-2016.02.01-dual.iso 

Neste exemplo, vemos um total de dez arquivos e quatro subdiretórios dentro e abaixo da nossa pasta Documentos .

Observe que a saída começa com um único ponto, que representa o diretório de trabalho. Executar a localização sem opções é o mesmo que especificar que a pesquisa deve começar no diretório de trabalho, assim:

encontrar .

O exemplo acima é a maneira "correta" de usar o find . Se você tentar usá-lo em outro sistema operacional similar ao UNIX, como o FreeBSD, você verá que especificar um diretório é necessário, portanto, é uma boa prática usar essa forma do comando.

Especificando onde pesquisar

Para listar apenas os arquivos e subdiretórios contidos no diretório / home / hope / Documents / images, especifique-o como o primeiro argumento do comando:

encontrar / home / hope / Documents / images

 / home / hope / Documentos / imagens / home / hope / Documentos / images / hp /home/hope/Documents/images/hp/snape.jpg /home/hope/Documents/images/hp/harry.jpg / home / hope / Documentos / imagens / memes /home/hope/Documents/images/memes/winteriscoming.jpg /home/hope/Documents/images/memes/goodguygary.JPG /home/hope/Documents/images/memes/picard.jpg 

Observe que o caminho completo também é mostrado nos resultados.

Se o nosso diretório de trabalho for / home / hope / Documents, podemos usar o seguinte comando, que encontra os mesmos arquivos:

encontrar ./images

Mas desta vez, a saída reflete a localização inicial da pesquisa e se parece com isso:

 ./imagens ./images/hp/images/hp/snape.jpg/images/hp/harry.jpg/images/memes/images/memes/winteriscoming.jpg/images/memes/goodguygary.JPG. /images/memes/picard.jpg 

Por padrão, a pesquisa procurará em todos os subdiretórios do seu local inicial. Se você quiser restringir quantos níveis de subdiretório pesquisar, você pode usar a opção -maxdepth com um número.

Por exemplo, especificar -maxdepth 1 pesquisará apenas no diretório em que a pesquisa é iniciada. Se algum subdiretório for encontrado, ele será listado, mas não será pesquisado.

encontrar . -maxdepth 1

 . ./images ./bigfiles.txt ./gimp-2.8.16.tar.bz2 ./hp-fanfic ./archlinux-2016.02.01-dual.iso 

Especificar -maxdepth 2 pesquisará no diretório e em um subdiretório:

encontrar . -maxdepth 2

 . ./images ./images/hp/images/memes/gimp-2.8.16.tar.bz2/hp-fanfic/hp-fanfic/malfoys-revenge.doc ./hp-fanfic/weekend-at- hagreds.doc ./hp-fanfic/dumbledores-lament.doc ./archlinux-2016.02.01-dual.iso 

Especificando -maxdepth 3 irá procurar um nível mais profundo do que isso:

encontrar . -maxdepth 3

 . ./imagens ./images/hp/images/hp/snape.jpg/images/hp/harry.jpg/images/memes/images/memes/winteriscoming.jpg/images/memes/goodguygary.JPG. /images/memes/picard.jpg ./gimp-2.8.16.tar.bz2 ./hp-fanfic ./hp-fanfic/malfoys-revenge.doc ./hp-fanfic/weekend-at-hagreds.doc ./ hp-fanfic / dumbledores-lament.doc ./archlinux-2016.02.01-dual.iso 

Encontrar pelo nome

Para restringir os resultados da pesquisa para corresponder somente aos arquivos e diretórios com um determinado nome, use a opção -name e coloque o nome entre aspas:

encontrar . -name "picard.jpg"

 ./images/memes/picard.jpg 

Você também pode usar curingas como parte do seu nome de arquivo. Por exemplo, para localizar todos os arquivos cujo nome termina em .jpg, você pode usar um asterisco para representar o resto do nome do arquivo. Quando você executa o comando, o shell fará o glob do nome do arquivo em qualquer coisa que corresponda ao padrão:

encontrar . -name "* .jpg"

 ./images/hp/snape.jpg ./images/hp/harry.jpg ./images/memes/winteriscoming.jpg ./images/memes/picard.jpg 

Observe que nosso comando não listou o arquivo cuja extensão ( JPG ) está em letras maiúsculas. Isso ocorre porque, diferentemente de outros sistemas operacionais, como o Microsoft Windows, os nomes de arquivos do Linux diferenciam maiúsculas e minúsculas.

Para realizar uma pesquisa sem distinção entre maiúsculas e minúsculas, use a opção -iname :

encontrar . -iname "* .jpg"

 ./images/hp/snape.jpg ./images/hp/harry.jpg ./images/memes/winteriscoming.jpg ./images/memes/goodguygary.JPG ./images/memes/picard.jpg 

Encontrando apenas arquivos ou apenas diretórios

Para listar apenas os arquivos e omitir os nomes dos diretórios dos seus resultados, especifique -type f :

encontrar . tipo f

 ./images/hp/snape.jpg ./images/hp/harry.jpg ./images/memes/winteriscoming.jpg ./images/memes/goodguygary.JPG ./images/memes/picard.jpg ./gimp-2.8 .16.tar.bz2 ./hp-fanfic/malfoys-revenge.doc ./hp-fanfic/weekend-at-hagreds.doc ./hp-fanfic/dumbledores-lament.doc ./archlinux-2016.02.01-dual .iso 

Para listar somente diretórios e omitir nomes de arquivos, especifique -type d :

encontrar . tipo d

 . ./imagens ./images/hp/images/memes/hp-fanfic 

Encontrando arquivos com base no tamanho

Para exibir apenas arquivos de um determinado tamanho, você pode usar a opção -size . Para especificar o tamanho, use um sinal de mais ou menos (para "mais de" ou "menor que"), um número e um sufixo quantitativo, como k, M ou G.

Por exemplo, para encontrar arquivos "maiores que 50 kilobytes", use -size + 50k :

encontrar . -size + 50k

 ./images/memes/winteriscoming.jpg ./gimp-2.8.16.tar.bz2 ./archlinux-2016.02.01-dual.iso 

Para arquivos "maiores que 10 megabytes", use -size + 10M :

encontrar . -size + 10M

 ./gimp-2.8.16.tar.bz2 ./archlinux-2016.02.01-dual.iso 

Para "maior que 1 gigabyte", use -size + 1G :

encontrar . -size + 1G

 ./archlinux-2016.02.01-dual.iso 

Para arquivos em um determinado intervalo de tamanho, use duas opções de tamanho . Por exemplo, para localizar arquivos "maiores que 10 megabytes, mas menores que 1 gigabyte", especifique -size + 10M -size -1G :

encontrar . -size + 10M -size -1G

 ./gimp-2.8.16.tar.bz2 

Localizando arquivos com base em modificação, acesso ou mudança de status

A opção -mtime restringe a pesquisa em quantos dias desde que o conteúdo do arquivo foi modificado. Para especificar dias no passado, use um número negativo. Por exemplo, para encontrar apenas os arquivos que foram modificados nos últimos dois dias (48 horas atrás), use -mtime -2 :

encontrar . -mtime -2

A opção -mmin faz a mesma coisa, mas em termos de minutos, não de dias. Por exemplo, este comando mostra apenas arquivos modificados na última meia hora:

encontrar . -mmin -30

Uma opção semelhante é -ctime, que verifica quando o status de um arquivo foi alterado pela última vez, medido em dias. Uma mudança de status é uma mudança nos metadados do arquivo. Por exemplo, alterar as permissões de um arquivo é uma mudança de status.

A opção -cmin irá procurar por uma mudança de status, medida em minutos.

Você também pode pesquisar quando um arquivo foi acessado pela última vez, ou seja, quando seu conteúdo foi visualizado mais recentemente. A opção -atime é usada para procurar arquivos com base em seu tempo de acesso mais recente, medido em dias.

A opção -amin realizará a mesma restrição de pesquisa, mas será medida em minutos.

Redirecionando a saída para um arquivo de texto

Se você estiver realizando uma pesquisa muito grande, talvez queira salvar os resultados da pesquisa em um arquivo, para poder visualizar os resultados posteriormente. Você pode fazer isso redirecionando sua saída de localização para um arquivo:

encontrar . -iname "* .jpg"> images.txt

Você pode então abrir seus resultados em um editor de texto ou imprimi-los com o comando cat .

cat images.txt

 ./images/hp/snape.jpg ./images/hp/harry.jpg ./images/memes/winteriscoming.jpg ./images/memes/goodguygary.JPG ./images/memes/picard.jpg 

Alternativamente, você pode canalizar sua saída para o comando tee, que irá imprimir a saída na tela e gravá-la em um arquivo:

encontrar . -size + 500M | tee bigfiles.txt

 ./archlinux-2016.02.01-dual.iso 

gato bigfiles.txt

 ./archlinux-2016.02.01-dual.iso 

Suprimindo mensagens de erro

Você pode receber a mensagem de erro "Permissão negada" ao executar uma pesquisa. Por exemplo, se você pesquisar o diretório raiz como um usuário normal:

encontrar /

 find: `/ var / lib / sudo / ts ': Permissão negada find:` / var / lib / sudo / lectured': Permissão negada find: `/ var / lib / polkit-1 ': Permissão negada find:` / var / lib / container ': Permissão negada find: `/var/lib/gdm3/.dbus': Permissão negada find:` /var/lib/gdm3/.config/ibus ': Permissão negada ... 

Você receberá essa mensagem de erro se encontrar tenta acessar um arquivo que sua conta de usuário não tem permissão para ler. Você pode executar a pesquisa como o superusuário ( root ), que tem acesso completo a todos os arquivos no sistema. Mas não é recomendado fazer coisas como root, a menos que não haja outras opções.

Se tudo que você precisa fazer é ocultar as mensagens "Permissão negada", você pode adicionar 2 &> 1 | grep -v "Permissão negada" ao final do seu comando, assim:

encontrar / 2> & 1 | grep -v "Permissão negada"

O exemplo acima filtra as mensagens "Permissão negada" da sua pesquisa. Como?

2> & 1 é um redirecionamento especial que envia mensagens de erro para a saída padrão para canalizar as linhas combinadas de saída para o comando grep . grep -v então executa uma correspondência inversa em "Permissão negada", exibindo apenas as linhas que não contêm essa cadeia.

Redirecionar e usar o grep para filtrar as mensagens de erro é uma técnica útil quando a "Permissão negada" está sobrecarregando seus resultados de pesquisa e você não pode realizar a pesquisa como raiz.

Exemplos

encontrar ~ /. -name "* .txt" -amin -120

Encontre todos os arquivos em seu diretório home e abaixo deles que terminam na extensão " .txt ". Exibe apenas os arquivos acessados ​​nas últimas duas horas.

encontrar . -name "* .zip" -size + 10M -mtime -3

Encontre todos os arquivos no diretório de trabalho e abaixo cujo nome tenha a extensão " .zip " e cujo tamanho seja maior que 10 megabytes. Exibe apenas arquivos cujo conteúdo foi modificado nas últimas 72 horas.

encontrar . -iname "* report *" -tipo f -maxdepth 2

Realize uma pesquisa que não diferencia maiúsculas de minúsculas de arquivos que contenham a palavra " relatório " em seus nomes. Se a pesquisa encontrar um diretório com "relatório" em seu nome, não o exiba. Pesquise apenas no diretório de trabalho e em um nível de diretório abaixo dele.

find / -name "* init *" 2> & 1 | grep -v "Permissão negada" | tee ~ / initfiles.txt

Encontre todos os arquivos no sistema cujo nome contenha " init ", suprimindo as mensagens de erro. Exibe os resultados na tela e os envia para um arquivo em seu diretório pessoal chamado " initfiles.txt ".