Criar um verificador de nome

1. Criar um verificador de nome

Diego Barcelos
cyberm4x

(usa Fedora)

Enviado em 22/04/2015 - 19:53h

Olá,

Pessoal sou novato em Shell scripts e estou desenvolvendo um Script de "Menu dinâmico". Porém, estacionei em uma parte, onde não estou conseguindo ter idéias.

Preciso criar um "VERIFICADOR DE NOME " onde este por sua vez. Irá verificar os nomes de todos os arquivos dentro de um diretório, se houver algum arquivo fora do padrão ele renomeai o mesmo para o nome padrão com uma numero sequencial.:

Padrão de arquivo com numero sequencial --> "TESTE_01" -- "TESTE_02" --"TESTE_03".

Sendo assim, o objetivo do mesmo será analisar um diretório especifico, onde nele só poderá conter um nome especifico para todos os arquivos, se eu jogar um arquivo novo lá dentro este por sua vez será renomeado automaticamente.

Agradeço a assistência desde já. ( ACEITEM O DESAFIO =D )

OBS.: CASO ALGUÉM ESTEJA INTERESSADO EM PARTICIPAR DESTE PROJETO COMIGO, FAVOR ME NOTIFICAR POR EMAIL, ONDE DIVULGAREI PARTE DO CÓDIGO QUE JÁ MONTEI E CONTAREI A IDÉIA E O PROPÓSITO DO PROJETO.

LEMBRANDO QUE SE DER TUDO CERTO, LOGO MAIS ESTARÁ DISPONÍVEL AQUI PARA GERAL UTILIZAR =D


  


2. Criar uma lista de nome

Joao Vitorino
Joao_Vitorino

(usa Red Hat)

Enviado em 12/05/2015 - 16:06h


Cara. em termo gerais eu faria assim.


1º - Listaria todos os arquivos em uma determinada pasta e salvaria em um arquivo temporário.
2ª Usaria um "while" para ler cada linha desse arquivo temporário (contendo um nome de arquivo por linha)
3º comparava cada linha encontrada com minha REGEX para determinar se o arquivo está no padrão
4º Arquivos fora do padrão seriam adicionados a uma lista (array)
5º Renomearia cada item da array (arquivo) para o meu padrão.
6º No meio disso tudo ai adicionava contadores para controlar as coisas (quantidade de arquivos com nome fora do padrão, quantidade de arquivos no total e etc)


Espero ter ajudado. Se ficar com dúvidas, posta ai o código que ajudo.





3. Re: Criar um verificador de nome

Diego Barcelos
cyberm4x

(usa Fedora)

Enviado em 18/05/2015 - 12:59h

Joao_Vitorino escreveu:


Cara. em termo gerais eu faria assim.


1º - Listaria todos os arquivos em uma determinada pasta e salvaria em um arquivo temporário.
2ª Usaria um "while" para ler cada linha desse arquivo temporário (contendo um nome de arquivo por linha)
3º comparava cada linha encontrada com minha REGEX para determinar se o arquivo está no padrão
4º Arquivos fora do padrão seriam adicionados a uma lista (array)
5º Renomearia cada item da array (arquivo) para o meu padrão.
6º No meio disso tudo ai adicionava contadores para controlar as coisas (quantidade de arquivos com nome fora do padrão, quantidade de arquivos no total e etc)


Espero ter ajudado. Se ficar com dúvidas, posta ai o código que ajudo.





Opa,

Cara muito obrigado pela dica, embora eu seja iniciante em shell script e programação. Já estou realizando o processo de construção e testes, qualquer novidade ou duvidas postarei aqui juntamente com o código desenvolvido ou parte dele =D





4. Dúvida restante

Diego Barcelos
cyberm4x

(usa Fedora)

Enviado em 25/05/2015 - 17:30h

Joao_Vitorino escreveu:


Cara. em termo gerais eu faria assim.


1º - Listaria todos os arquivos em uma determinada pasta e salvaria em um arquivo temporário.
2ª Usaria um "while" para ler cada linha desse arquivo temporário (contendo um nome de arquivo por linha)
3º comparava cada linha encontrada com minha REGEX para determinar se o arquivo está no padrão
4º Arquivos fora do padrão seriam adicionados a uma lista (array)
5º Renomearia cada item da array (arquivo) para o meu padrão.
6º No meio disso tudo ai adicionava contadores para controlar as coisas (quantidade de arquivos com nome fora do padrão, quantidade de arquivos no total e etc)


Espero ter ajudado. Se ficar com dúvidas, posta ai o código que ajudo.




Olá,

Ainda estou meio perdido em algumas questões, por favor gostaria de ajuda. Segue minha dúvida.:

* Já tenho alguns arquivos dentro do meu diretório (menu), - COMO FAÇO PARA SABER A ULTIMA POSIÇÃO DO MESMO E SALVAR EM ALGUMA VARIAVEL OU LOCAL PARA, POSTERIOR COMPARAÇÃO ?

Segue meu código até aqui.:
-----------------------------------------------------------------------------------------------------------------------------------

#/bin/bash

DIR_MENU="/home/diego/scripts/novo" #DEFINA O CAMINHO DIR MENU
ARQ_LIST="/tmp/menuList.txt" # DEFINA A LISTA DE ARQUIVO DEFAULT

transiction_file(){

while :;do
CHECKDIR=(`ls -1 $DIR_MENU | sort`) # VERIFICA O DIRETÓRIO "MENU"
LISTA=(`ls -1 $DIR_MENU | grep -e '^teste[[:digit:]]\+\.sh$' | sort > $ARQ_LIST`) #GERA E ALIMENTA A LISTA DEFAULT
GETLIST=(`cat $ARQ_LIST | sort`) #FICA LENDO CONTEÚDO DA LISTA DEFAULT
BLACK_LIST=(`ls -1 $DIR_MENU | grep -v -e '^teste[[:digit:]]\+\.sh$' | sort > /tmp/blacklist.txt`) #FICA GERANDO LISTA ARQUIVOS DIFF

if [ "$CHECKDIR" != "$GETLIST" ] ;then
getBlackList=(`cat /tmp/blacklist.txt | sort`)
echo "lista contém ${#getBlackList[@]} itens novos.:" \n
i=0
while [ $i -lt ${#getBlackList[@]} ]; do
echo "$i - ${getBlackList[$i]}"
let i++
done
sleep 2
exit 1
else
echo "Blz, tudo em ordem "
fi
sleep 3
done
}

transiction_file

Lembrando que o objetivo do script é saber que existe um ou mais caras diferentes dentro do DIR_MENU e em seguida, renomear esses caras para o prefixo sequencial dos arquivos dentro do diretório.

Por favor, pode me ajudar ??




5. Re: Criar um verificador de nome

Joao Vitorino
Joao_Vitorino

(usa Red Hat)

Enviado em 26/05/2015 - 11:59h


Olá,

Ainda estou meio perdido em algumas questões, por favor gostaria de ajuda. Segue minha dúvida.:

* Já tenho alguns arquivos dentro do meu diretório (menu), - COMO FAÇO PARA SABER A ULTIMA POSIÇÃO DO MESMO E SALVAR EM ALGUMA VARIAVEL OU LOCAL PARA, POSTERIOR COMPARAÇÃO ?

Segue meu código até aqui.:
-----------------------------------------------------------------------------------------------------------------------------------

#/bin/bash

DIR_MENU="/home/diego/scripts/novo" #DEFINA O CAMINHO DIR MENU
ARQ_LIST="/tmp/menuList.txt" # DEFINA A LISTA DE ARQUIVO DEFAULT

transiction_file(){

while :;do
CHECKDIR=(`ls -1 $DIR_MENU | sort`) # VERIFICA O DIRETÓRIO "MENU"
LISTA=(`ls -1 $DIR_MENU | grep -e '^teste[[:digit:]]\+\.sh$' | sort > $ARQ_LIST`) #GERA E ALIMENTA A LISTA DEFAULT
GETLIST=(`cat $ARQ_LIST | sort`) #FICA LENDO CONTEÚDO DA LISTA DEFAULT
BLACK_LIST=(`ls -1 $DIR_MENU | grep -v -e '^teste[[:digit:]]\+\.sh$' | sort > /tmp/blacklist.txt`) #FICA GERANDO LISTA ARQUIVOS DIFF

if [ "$CHECKDIR" != "$GETLIST" ] ;then
getBlackList=(`cat /tmp/blacklist.txt | sort`)
echo "lista contém ${#getBlackList[@]} itens novos.:" \n
i=0
while [ $i -lt ${#getBlackList[@]} ]; do
echo "$i - ${getBlackList[$i]}"
let i++
done
sleep 2
exit 1
else
echo "Blz, tudo em ordem "
fi
sleep 3
done
}

transiction_file

Lembrando que o objetivo do script é saber que existe um ou mais caras diferentes dentro do DIR_MENU e em seguida, renomear esses caras para o prefixo sequencial dos arquivos dentro do diretório.

Por favor, pode me ajudar ??



Não entendi a sua pergunta, mas pelo que vi do script, só falta renomear os arquivos. Como você ja salvou os arquivos diferente em uma lista "/tmp/blacklist.txt", bastaria ler esse arquivo linha por linha e renomear (pelo menos é o que eu faria).

Algo mais ou menos assim:


if [ -s $BLACK-LIST ]; then #verifica se o arquivo $BLACK_LIST está vazio
echo "A lista $BLACK_LIST não contém nenhum arquivo"
else
while read LINHA; do
mv $LINHA {CAMINHO_NOME_NOVO_ARQUIVO}
done < $BLACK_LIST
fi


Caso seu arquivo $BLACK_LIST seja muito grande - tipo 80 mil linhas - é bom considerar o uso de um descritor conforme descrito aqui http://www.vivaolinux.com.br/topico/Shell-Script/Ler-arquivo-e-executar-acao-para-cada-linha
Qualquer dúvida posta ai.



6. Re: Criar um verificador de nome

Diego Barcelos
cyberm4x

(usa Fedora)

Enviado em 26/05/2015 - 16:15h

Joao_Vitorino escreveu:

[quote]
Olá,

Não entendi a sua pergunta, mas pelo que vi do script, só falta renomear os arquivos. Como você ja salvou os arquivos diferente em uma lista "/tmp/blacklist.txt", bastaria ler esse arquivo linha por linha e renomear (pelo menos é o que eu faria).

Algo mais ou menos assim:


if [ -s $BLACK-LIST ]; then #verifica se o arquivo $BLACK_LIST está vazio
echo "A lista $BLACK_LIST não contém nenhum arquivo"
else
while read LINHA; do
mv $LINHA {CAMINHO_NOME_NOVO_ARQUIVO}
done < $BLACK_LIST
fi


Caso seu arquivo $BLACK_LIST seja muito grande - tipo 80 mil linhas - é bom considerar o uso de um descritor conforme descrito aqui http://www.vivaolinux.com.br/topico/Shell-Script/Ler-arquivo-e-executar-acao-para-cada-linha
Qualquer dúvida posta ai.


------------------------------------------------------------------------------------------------------------------
Boa tarde,

Ainda resta dúvida vou tentar ser mais claro. Vamos lá tenho um diretório "$MENU_DIR" que já existe uma quantidade X de arquivos "teste01, teste02, teste03..." dentro do mesmo.

Sendo assim, gostaria que os novos arquivos desse continuidade a nomenclatura conforme o default "testeXX" eis a minha dúvida como exatamente eu faria isso, o script precisa saber quem é o ultimo arquivo do "$MENU_DIR" e gravar isso em algum lugar, para quando chegar algum arquivos novo ou diferente o mesmo saiba exatamente qual nome dar ao novo arquivo, seguindo o default e uma sequencia de números.

OBS.: Se algum arquivo for removido ele deve ignorar e prosseguir com a sequecia númerica de onde parou

O objetivo disso é referente a visualização do arquivo em um MENU que estou criando, onde este por sua vez precisa ser completamente dinâmico. Ou seja, se aparecer algum arquivo novo ele detecta o mesmo e caso esteja diferente ele resolva isso da seguinte maneira --> validando o arquivo novo, verificando se o mesmo está fora do padrão e tomando as devidas ações.




7. Re: Criar um verificador de nome

Joao Vitorino
Joao_Vitorino

(usa Red Hat)

Enviado em 26/05/2015 - 16:37h


------------------------------------------------------------------------------------------------------------------
Boa tarde,

Ainda resta dúvida vou tentar ser mais claro. Vamos lá tenho um diretório "$MENU_DIR" que já existe uma quantidade X de arquivos "teste01, teste02, teste03..." dentro do mesmo.

Sendo assim, gostaria que os novos arquivos desse continuidade a nomenclatura conforme o default "testeXX" eis a minha dúvida como exatamente eu faria isso, o script precisa saber quem é o ultimo arquivo do "$MENU_DIR" e gravar isso em algum lugar, para quando chegar algum arquivos novo ou diferente o mesmo saiba exatamente qual nome dar ao novo arquivo, seguindo o default e uma sequencia de números.

OBS.: Se algum arquivo for removido ele deve ignorar e prosseguir com a sequecia númerica de onde parou

O objetivo disso é referente a visualização do arquivo em um MENU que estou criando, onde este por sua vez precisa ser completamente dinâmico. Ou seja, se aparecer algum arquivo novo ele detecta o mesmo e caso esteja diferente ele resolva isso da seguinte maneira --> validando o arquivo novo, verificando se o mesmo está fora do padrão e tomando as devidas ações.




Agora entendi....

Uma lista em sequencia de todos os arquivos que estão no padrão (creio que vc já fez isso com o sort). Jogue em um arquivo /tmp/alguma_coisa (consigo trabalhar melhor meus scripts recorrendo a arquivos temporários... mas existem maneiras melhores de fazer).

pegue somente o ultimo nome que está no arquivo /tmp/alguma_coisa
ultimo='tail -n1 /tmp/alguma_coisa'

Agora use um regex para saber qual o numero desse arquivo ( aqui vai um pouco de google pois não lembro como faz esse regex ), ou então pode pegar a variavel $ultimo e transformar em uma lista para identificar os valores.
Enfim, vamos supor que você descobriu que o ultimo arquivo é o teste253.txt, ou seja, $ultimo_numero=253.
Como você quer um nome sequencial, o próximo nome seria teste($ultimo_numero + 1).txt.

Não sei se fui claro e deve ter maneiras melhores de fazer isso. Mas espero ter ajudado.
Se tiver mais dúvidas posta ai.










8. Re: Criar um verificador de nome

Diego Barcelos
cyberm4x

(usa Fedora)

Enviado em 26/05/2015 - 16:59h

Opa,

Perfeito, muito obrigado.

Irei realizar alguns teste conforme sua orientação, logo mais chego com novidades. Ou mais dúvidas he he.

Essa seria uma das únicas partes que estão faltando para integrar ao menu 100 % dinâmico onde ele reconhece cada item novo adicionado no diretório de menu, acrescenta o mesmo de forma automática ao menu de apresentação do scrpit.

Tornando assim, o script hiper vivo e inteligente o suficiente. Onde não há necessidade de ficar atualizando o mesmo a cada script novo que for acrescentar ao menu como opção de execução.




9. Re: Criar um verificador de nome

Joao Vitorino
Joao_Vitorino

(usa Red Hat)

Enviado em 26/05/2015 - 17:52h

cyberm4x escreveu:

Opa,

Perfeito, muito obrigado.

Irei realizar alguns teste conforme sua orientação, logo mais chego com novidades. Ou mais dúvidas he he.

Essa seria uma das únicas partes que estão faltando para integrar ao menu 100 % dinâmico onde ele reconhece cada item novo adicionado no diretório de menu, acrescenta o mesmo de forma automática ao menu de apresentação do scrpit.

Tornando assim, o script hiper vivo e inteligente o suficiente. Onde não há necessidade de ficar atualizando o mesmo a cada script novo que for acrescentar ao menu como opção de execução.




SHow de bola. Esse é o nosso trabalho de TI. Automatizar o máximo possível.







Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts