Linux aprender comando find para usar em shell scripts

Linux o que é o comando find?

Um dos mais importantes e usados comandos da linha de comando em sistemas operacionais Linux é o find.

Para que serve o comando find?

O find (localização) pode ser usado em várias condições. Posso encontrar arquivos por permissões, usuários, grupos, tipo de arquivo, data, tamanho e outros critérios.

Aprender o comando find?

Para aprender, o modo mais seguro é criar uma pasta na pasta pessoal chamada TESTE. Ela servirá para realizar os estudos. Criar na pasta TESTE arquivos:

texto.txt
Texto.doc
texto
texto4.docx
texto.html
postado.html
musica.mp3
mucic
video.mkv
Video.mp4
video.avi
Video
script.sh
script2.sh
script
img.jpg
imge.png
imagem.jpeg
img
arq.pdf
arquivo.epub
arq
bkp.zip
back.tar
bkp.old.tgz
bkp
teste.txt
test.txt
test
script.c
script2.c
script

Atenção!

1) Não execute nenhum comando como root.

2) Não use sudo em nenhum comando.

3) Tenha backup de todos os seus arquivos. Quem tem 1 backup não tem nenhum.

Para serem localizados pelo comando find usando vários critérios.

Iniciar os estudos.

Encontrar arquivos na pasta onde está é com ponto -name. Exemplo:

find . -name texto.txt

Encontrar arquivos na pasta pessoal:

find ~/ -name Texto.txt

Localizar arquivos usando nome e ignorando maiúsculas e minúsculas:

find . -iname texto.txt

find ~/TESTE/ -iname video.mkv

Encontrar diretórios usando -name:

find ~/ -type d -name TESTE

Encontrar arquivos usando ponto -type f -name:

find . -type f -name bkp*

Encontrar todos os arquivos txt no diretório/pasta/folder TESTE:

find . -type f -name “*.txt”

Encontrar arquivos com permissão 777:

find . -type f -perm 0777 -print

Encontrar arquivos sem permissão 777:

find / -type f ! -perm 777

Localizar todos os arquivos de bit SGID cujas permissões estão definidas para 644:

find / -perm 2644

Encontrar todos os arquivos de conjunto de bits fixos cuja permissão seja 551:

find / -perm 1551

Encontrar todos os arquivos de conjunto SGID:

find / -perm /g=s

Encontrar todos os arquivos executáveis:

find / -perm /a=x

Localizar todos os arquivos de permissão 777 e usar o comando chmod para definir as permissões para 644.

find / -type f -perm 0777 -print -exec chmod 644 {} \;

Encontrar todos os diretórios de permissão 777 e usar o comando chmod para definir as permissões para 755.

find / -type d -perm 777 -print -exec chmod 755 {} \;

Para localizar e remover em TESTE vários arquivos, como .mp3 ou .txt, use.

find . -type f -name “*.txt” -exec rm -f {} \;

OR

find . -type f -name “*.mp3” -exec rm -f {} \;

Encontrar todos os diretórios vazios:

find /tmp -type d -empty

Encontrar todos os arquivos que pertencem ao usuário eu.

find ~/ -user eu

Para encontrar todos os arquivos que pertencem ao grupo Developer no diretório /home.

find /home -group developer

Encontrar todos os .txt do usuário eu na pasta home:

find /home -user eu -iname “*.txt”

Encontrar todos os arquivos modificados 60 dias atras.

find / -mtime 60

Encontrar os modificados 25 dias atrás.

find / -atime 25

Para encontrar todos os arquivos que foram alterados/movido na última 1 hora.

find / -cmin -60

Arquivos trabalhados na última 1 hora.

find / -amin -60

Encontrar arquivos de 50MB

find / -size 50M

Arquivos entre 50 e 100MB

find / -size +50M -size -100M

Encontrar e deletar arquivos de 100MB (cuidado!).

find / -type f -size +100M -exec rm -f {} \;

Encontrar e deletar mp3 com mais de 10MB! mp3 bom pra eu tem de 3 a 5MB. O resto é perda de espaço no HD. Ora, foi pra isto que o mp3 foi criado poxa! Pequeno.

find / -type f -name *.mp3 -size +10M -exec rm {} \;

Linux adicionar data ao nome de um arquivo pelo terminal

Tem um arquivo txt. Tem sempre no caminho um arquivo txt. Sh tem um monte de arquivo .sh. Havia um arquivo .sh no caminho e existe 4 (quatro anos) de arquivo .sh.

O objetivo é adicionar data (dia, mês, ano) ao nome de um arquivo declaro uma variável no arquivo .bash_aliases que está na pasta pessoal. Para achar ele digito: cd && ls -a. Usando editor de texto abro o .bash_aliases ou .bashrc e lá no final dele declaro uma variável chamada DDT. Ela fica colorida. Esta variável armazenará um comando. Tudo junto fica assim:

DDT=`date +%d-%m-%Y`.txt

Salvo o arquivo alterado. Tenho que avisar que o arquivo foi alterado com o comando:

source .bash_aliases

Modo de usar é com o comando touch?

Comando:

touch nome_do_arquivo_$DDT

Resultado:

nome_do_arquivo_02-03-2020.txt

Funcionou. Agora, como fazer isto com centenas de arquivos .sh?

Até Breve!

🙂

---

Linux grep, egrep exemplos

semanickz

Linux comandos grep e egrep com exemplos

Linux-grep-egrep-exemplos

Qual é a diferença entre o Grep, o Egrep e o Fgrep no Linux?

Grep, Egrep e Fgrep são renomadas ferramentas de busca em sistemas Linux que podem ser usados ​​para procurar qualquer coisa, seja um arquivo, ou uma linha ou várias linhas no arquivo grep. Ele é muito vasto em funcionalidade, o que pode ser atribuído ao grande número de opções que ele suporta, como: pesquisar usando padrão de strings, ou reg-ex ou reg-ex com base em perl, etc.

Devido às suas diversas funcionalidades, ele possui muitas variantes, incluindo grep, egrep (GREP estendido), fgrep (GREP fixo), pgrep (GREP de processo), rgrep (GREP recursivo) etc. Mas essas variantes têm pequenas diferenças no grep original que as tornou popular e podem ser usado por vários programadores Linux para diferentes tarefas específicas.

A principal coisa que resta a ser investigada é quais são as diferenças entre as três variantes principais grep, egrep e fgrep do grep, que fazem com que os usuários do Linux escolham uma ou outra versão como por requisito.


Alguns Metacaracteres Especiais do grep:

+

Equivalente a uma ou mais ocorrências do caractere anterior.

?

Isso denota pelo menos 1 repetição do caractere anterior. Como a? Corresponderia a ou aa.

(

Início da expressão de alternância.

)

Fim da expressão de alternância.

|

Correspondência da expressão separada por |. Como: (a|b)cde corresponderia a abcde ou bbcde.

{

Este metacaractere indica o início do especificador de intervalo. Como: um {2} corresponde aa no arquivo a 2 vezes.

}

Esse metacaractere indica o especificador de fim de intervalo.

O mais usado deles neste momento para mim talvez seja o egrep. Ele é bom para usar com expressões regulares. Neste momento, só ele me interessa. Mas o egrep vem do grep então o que é grep?

grep ou Global Regular Expression Print é o principal programa de busca em sistemas Linux (Unix-like) que pode procurar qualquer tipo de string em qualquer arquivo ou lista de arquivos ou até mesmo a saída de qualquer comando.

Ele usa expressões regulares básicas, além das strings normais, como um padrão de pesquisa. Em Basic Regular Expressions (BRE), meta-caracteres como:

'{','}','(',')','|','+','?'

Perde o significado e são tratados como caracteres normais de string e precisam ser escapados se forem tratados como caracteres especiais.

grep usa o algoritmo Boyer-Moore para pesquisar rapidamente qualquer string ou expressão regular.

Exemplos:

grep -C 0 '(f|g)ile' check_file
grep -C 0 '\(f\|g\)ile' check_file

Quando o comando é executado sem escapar, ele procura pela string completa no arquivo. Mas quando os caracteres especiais foram escapados, em vez de tratá-los como parte da string, grep os tratou como metacaracteres e buscou por palavras arquivo ou urquivo no arquivo.

Comando Egrep. egrep ou grep -e é outra versão do grep ou do grep estendido. Esta versão do grep é eficiente e rápida quando se trata de procurar um padrão de expressão regular, uma vez que trata meta-caracteres como é e não os substitui como strings como no grep, e, portanto, você está livre do fardo de escapar deles no grep. Ele usa o ERE ou o conjunto de expressões regulares estendidas.

No caso do egrep, mesmo que você não escape dos meta-caracteres, ele os trataria como caracteres especiais e os substituiria por seu significado especial, em vez de tratá-los como parte da string.


Exemplos:

egrep -C 0 '(f|g)ile' check_file
egrep -C 0 '\(f\|g\)ile' check_file

Como aqui, egrep procurou por:


“file”


string quando os meta-caracteres não foram escapados como isso significaria pelo significado desses caracteres. Mas, quando esses caracteres foram escapados, egrep os tratou como parte da string e pesquisou por string completa no arquivo.:

“(f|g)ile”


Exemplo para encontrar apenas arquivos .mp3:

O grep pode ser muito útil para filtrar a partir do stdout.

find . –name “*.mp3” | grep –i nome-do-artista | grep –vi “nome-parcial-da-faixa-que-procuro”


Para saber melhor visite.