Como utilizar o comando find no Linux através do nome de um Ficheiro
Imagine que você precisa de procurar um ficheiro de php com o nome jobfind.php, dentro de um diretorio chamado plugin, num servidor Linux. como root ou utilizador execute o comando:
find . -name "jobfind.php"
O output será:
./admin/plugin/jobfind.php
Se quisermos também alterar as permissões do ficheiro como, por exemplo:
find . -name "jobfind.php" -exec chmod 644 {} \;
Se quiser por exemplo pesquisar o mesmo nome de ficheiro dentro da pasta admin:
find admin -name "jobfind.php"
Se preferir usar um caminho físico absoluto:
find /home/username/public_html/admin -name "jobfind.php"
Se precisar de pesquisar o nome do ficheiro, mas sem que a pesquisa seja CASE SENSITIVE, experimente:
find . -iname "jobfind.php"
Veja a diferença com:
find . -iname "jobfind.php" -exec ls -l {} \;
ou
find . -iname "jobfind.php" -print0 | xargs -0 ls -l
Usar O Comando find No Linux Com grep Para Pesquisar Uma string Ou Texto
Imagine que precisamos de encontrar um pedaço de código num dos ficheiro PHP do WordPress, mas não sabemos em qual. Vamos pesquisar a palavra WordPress em todos os ficheiros php:
find . –name "*.php" -print0 | xargs -0 grep -Hin "WordPress"
ou
find . –name "*.php" -exec grep -Hin "WordPress" {} \;
E a ficheiros PHP alterados nas últimas 48 horas:find . –name "*.php" -mtime -2 -exec grep -Hin --color=always "WordPress" {} \;
Finalmente, vamos limitar o output aos ficheiros que incluem a string WordPress, substituindo o grep -Hin com o grep -l:
find . –name "*.php" -print0 | xargs -0 grep -l "WordPress"
ou
find . –name "*.php" -exec grep -l "WordPress" {} \;
E se quisermos pesquisar em todos os ficheiros php e html?
find . \( -name "*.php" -o -name "*.html" \) -print0 | xargs -0 grep -Hin "WordPress"
Se não quisermos usar o find para restringir a pesquisa a determinados tipo de ficheiros, a intervalos de data e tempo, a tamanhos de ficheiros, podemos usar apenas:
grep -Hirn --color=always WordPress *
Autopsiando o grep -Hirn –color=always
-H imprime o nome dos ficheiros e respectivo caminho físico (no exempo supra, poderíamos prescindir o H - imprime por defeito)
-i pesquisa sem que seja CASE-SENSITIVE
-r faz uma pesquisa recursiva
-n imprime a linha no código onde se encontra a string pesquisada
--color=always usa cores no output de modo a tornar o output mais apresentável
Se quiser excluir uma diretoria da pesquisa:--exclude-dir=dir
Usar O Comando find No Linux Com Base No Inode Do Ficheiro
Se estiver com problemas para apagar um ficheiro, dado que o nome do ficheiro é meio estranho, descubra o inode do ficheiro com o comando ls:
ls -il
e depois apague desta forma:
find -inum 42566767275 -exec rm {} \;
Se quiser excluir todas as pastas .home em um servidor, use o seguinte comando:
find . -type f | grep -i “\.home” | xargs rm |
Este comando abaixo irá procurar recursivamente por quaisquer directórios ou arquivos contendo “. Gif” no nome do arquivo/directório dentro do directório Gif especificado. Isto incluirá ficheiros .gif / e .gifignore e quaisquer outros activos .gif-like. O comando é iterativo e será solicitado antes de remover. Para continuar com a exclusão, basta digitar y, depois Enter.
find $GIT_DIR -name *.gif* -ok rm -Rf {} \; |
Usar O Comando find No Linux Para Fintar O Error Argument List Too Long
Já tentou listar os ficheiros num diretório para retornar o erro:
bash: /bin/ls Argument list too long
Experimente:
find . -type f -print0 | xargs -0 ls -l
ou
find . -maxdepth 1 -print0 | xargs -0 ls -l
ou ainda
find . -maxdepth 1 -type f -exec ls -l {} \; | less
Já encontrou a partição /tmp quase cheia e precisou de apagar os ficheiros, mas deparou com o erro
bash: /bin/rm: Argument list too long
Tenha especial cuidado com qualquer comando que apague ficheiros…
Vamos apagar os ficheiros, mas sem apagar quaisquer pastas e respectivos ficheiros e vamos deixar os links simbólicos (noto que o find por defeito não segue os links simbólicos):
find . -maxdepth 1 -type f -exec rm -f {} \;
O comando deve ser executado dentro da pasta /tmp
alternativa:
find . -maxdepth 1 -type f -print0 | xargs rm -f
Vamos agora usar a opção -delete do find:
find /tmp -maxdepth 1 -type f -delete
Usar O Comando find No Linux Com Base Nas Permissões Dos Ficheiros
Vamos agora pesquisar
ficheiros com permissões 777 dentro
dessa instalação do WordPress:
find . -perm 0777 -type f -exec ls -l {} \;
e pesquisar
pastas com permissões 777:
find . -perm 0777 -type d -exec ls -l {} \;
Usar O Comando find No Linux Com Base No Tamanho Dos Ficheiros
Já tentou pesquisar os 10 maiores ficheiros dentro duma instalação WordPress ou até dentro duma partição?
find . -type f -exec ls -s {} \; | sort -n -r | head -10
Neste exemplo, a listagem por tamanho dado pelo comando ls -s é muito importante. Veja como é diferente do uso do comando ls noutros exemplos, onde usamos ls -l. Experimente os 2 comandos:
ls -l
ls -s
O comando para pesquisar os 10 ficheiros mais pequenos é exactamente igual, com a diferença da parte do comando que ordena os ficheiros:
sort -n -r
aqui a ordem é descendente.
Para pesquisar os 10 ficheiros mais pequenos, use:
sort -n
Portanto, o comando completo é:
find . -type f -exec ls -s {} \; | sort -n | head -10
E se precisarmos de pesquisar ficheiros maiores que 100 MB:
find . -size +100M -exec ls -s {} \;
Para pesquisar ficheiros vazios, podemos executar este comando:
find . -empty -exec ls -l {} \;
Usar O Comando find No Linux Com Base No Tipo De Ficheiros
Se quisermos pesquisar link simbólicos:
find . -type l -exec ls -l {} \;
Veja a diferença, se executar apenas:
find . -type l
Para pesquisarmos ficheiros escondidos:
find . -type f -name ".*"
Já experimentamos vários exemplos onde passamos ao comando find o tipo de ficheiro a pesquisar:
-type f (ficheiro)
-type l (link simbólico)
-type d (diretório)
Usar O Comando find No Linux Com Base Na Data E No Tempo Dos Ficheiros
Vamos agora pesquisar todos os ficheiros que foram acedidos nas últimas 24 horas:
find . -type f -atime -1 -exec ls -l {} \;
e todos os ficheiros que foram modificados nas últimas 24 horas:
find . -type f -mtime -1 -exec ls -l {} \;
Agora, em vez de nas últimas 24 horas, vamos pesqusiar os ficheiros que foram modificados ontem:
find . -type f -mtime -1 -daystart -exec ls -l {} \;
Ao adicionar a opção -daystart, contamos as 24 horas a contar do início do dia de ontem.
Hoje, é Terça. Imagine que queremos saber que ficheiros foram modificados durante o fim de semana:
find . -type f -mtime 2 -mtime -3 -daystart -exec ls -l {} \;
Vamos analisar as 3 opções de tempo:
-mtime = quando alteramos o conteúdo do ficheiro
-ctime = quando o inode associado ao ficheiro foi alterado - alterado sempre que alteramos o conteúdo, mas também quando mudamos o dono, as perrmissões do ficheiro, quando movemos para outra pasta
-atime = quando o ficheiro foi lido pela última vez