Pular para o conteúdo

Script verifica o dia/mes/ano e cria pasta sempre que o dia for outro. [RESOLVIDO]

Responder tópico
  • Denunciar
  • Indicar

1. Script verifica o dia/mes/ano e cria pasta sempre que o dia for outro. [RESOLVIDO]

Enviado em 05/02/2015 - 10:29h


Bom dia galera do Viva o Linux.

Estou tendo uma dificuldade extrema para fazer algo simples, isso pq não sou phd em linux, peço desculpa pela ignorancia.

O que quero é o seguinte:

1- A cada uma hora, o linux executa esse script que envia um bloco de texto para um host FTP. (isso eu ja consegui)
#!/bin/sh
DATA=`date +%d_%m_%Y`
HORA=`date +%H:%M`
MAQUINA=$(hostname -s)
HOST='xxx.xxx.com.br'
USER='XXXXXX'
PASSWD='XXXXXXXX'
FILE='/usr/bin/ARQUIVO.txt'

ftp -in << EOF
open $HOST
user $USER $PASSWD
passive
put $FILE
rename /usr/bin/ARQUIVO.txt /usr/bin/$HORA.$DATA.$MAQUINA.txt
bye
EOF

cat /dev/null > /usr/bin/ARQUIVO.txt
2- Sempre que o dia mudar(sempre que for outro dia, dia seguinte) esse script verifica o dd/mm/aaaa se for outro, ele cria uma outra pasta no host FTP com o nome dd/mm/aaaa.
EU NAO SEI O CODIGO, ALGUEM ME AJUDA?? 
Simples não?
É isso, assim terei uma pasta todos os dias com os arquivos texto correspondentes ao dia.

Alguem pode me ajudar nesse script?

Responder tópico

2. Re: Script verifica o dia/mes/ano e cria pasta sempre que o dia for outro. [RESOLVIDO]

Melhor resposta

Enviado em 05/02/2015 - 15:58h

xxncsxx escreveu:

Sei que parecerá exploração e desinteresse meu, mas voce pode fazer um exemplo do script de como ficaria, pq não seu muito em script.
Uma ótima oportunidade para aprender! É mais efetivo você postar suas dúvidas do que pedir a alguém para fazer o seu trabalho. Bom, há casos em que vale mais a pena contratar alguém para fazer o serviço. Eu estou sem condições de fazer um script mesmo de exemplo porque no momento não tenho acesso de escrita a nenhum servidor ftp e há detalhes que não lembro de cór.

o comando mkdir não tem uma opção de ignorar se ja houver criado?
Não. Nem nas versões mais poderosas de cliente ftp como ncftp e lftp.


tipo mkdir -p (eu tentei mas acabou criando uma pasta com o nome "-p")
Mais uma observação (só lembrei agora), para não deixar usuário e senha no script você pode utilizar o arquivo ~/.netrc. A sintaxe é a seguinte:

machine <hostname ou IP> login <username/e-mail> passord <sua senha> 
e passar a opção -n ("auto-login").

3. Re: Script verifica o dia/mes/ano e cria pasta sempre que o dia for outro. [RESOLVIDO]

Enviado em 05/02/2015 - 11:33h

xxncsxx escreveu:


Bom dia galera do Viva o Linux.

Estou tendo uma dificuldade extrema para fazer algo simples, isso pq não sou phd em linux, peço desculpa pela ignorancia.

O que quero é o seguinte:

1- A cada uma hora, o linux executa esse script que envia um bloco de texto para um host FTP. (isso eu ja consegui)
#!/bin/sh
DATA=`date +%d_%m_%Y`
HORA=`date +%H:%M`
MAQUINA=$(hostname -s)
HOST='xxx.xxx.com.br'
USER='XXXXXX'
PASSWD='XXXXXXXX'
FILE='/usr/bin/ARQUIVO.txt'

ftp -in << EOF
open $HOST
user $USER $PASSWD
passive
put $FILE
rename /usr/bin/ARQUIVO.txt /usr/bin/$HORA.$DATA.$MAQUINA.txt
bye
EOF

cat /dev/null > /usr/bin/ARQUIVO.txt


2- Sempre que o dia mudar(sempre que for outro dia, dia seguinte) esse script verifica o dd/mm/aaaa se for outro, ele cria uma outra pasta no host FTP com o nome dd/mm/aaaa.
EU NAO SEI O CODIGO, ALGUEM ME AJUDA?? 


Simples não?
É isso, assim terei uma pasta todos os dias com os arquivos texto correspondentes ao dia.

Alguem pode me ajudar nesse script?
Não seria apenas criar o diretório com o conteúdo da variável $DATA e mover os arquivos para dentro dele?

Algumas recomendações:

- Evite (de preferência não use) variáveis em maiúsculo, elas podem entrar em conflito com variáveis de ambiente (padrão ou não) e quando ocorre é muito difícil de descobrir o que aconteceu e onde.

- Não use diretórios para armazenamento de executáveis (/usr/bin/) para armazenar nenhuma outra coisa, além do fator desorganização, pode-se ter surpresas arbitrárias desagradáveis.

- Por questões de organização e manutenção, prefira utilizar datas no formato "ano mes dia".

Não testei, mas a ideia de que falei seria mais ou menos:

read data hora < <(date +%F\ %T) 
e no ftp:


mkdir $directory/$date/
rename $directory/ARQUIVO.txt $directory/$date/$maquina.$data.$hora.txt

4. Re: Script verifica o dia/mes/ano e cria pasta sempre que o dia for outro. [RESOLVIDO]

Enviado em 05/02/2015 - 11:49h


Obrigado pelas dicas textmode

O que eu queria era mais ou menos assim

#!/bin/sh
DATA=`date +%d_%m_%Y`
HORA=`date +%H:%M`
MAQUINA=$(hostname -s)
HOST='xxx.xxx.com.br'
USER='XXXXXX'
PASSWD='XXXXXXXX'
FILE='/usr/bin/ARQUIVO.txt'
CAMINHO='/usr/bin/$DATA' (dentro do ftp)

ftp -in << EOF
open $HOST
user $USER $PASSWD
passive

if [ ! -d "$CAMINHO" ]; then (verifica se há uma pasta com a data do dia, se nao vai para o else)
put $FILE
rename /usr/bin/ARQUIVO.txt /usr/bin/$HORA.$DATA.$MAQUINA.txt
bye
EOF

else
mkdir /usr/bin/$DATA (esse local é dentro do ftp)
put $FILE
rename /usr/bin/ARQUIVO.txt /usr/bin/$HORA.$DATA.$MAQUINA.txt
bye
EOF

cat /dev/null > /usr/bin/ARQUIVO.txt



Mas ao executar esse script, da o seguinte erro.
?Invalid Command
scrpt: 19: script: Syntax error: "else" unexpected


Pelo que entendi, dentro do FPT (pelo terminal) não reconhece o comando if e else, é isso mesmo?

Como fasso par verificar se uma pasta existe ou nao dentro de um host ftp?

5. Re: Script verifica o dia/mes/ano e cria pasta sempre que o dia for outro. [RESOLVIDO]

Enviado em 05/02/2015 - 12:53h

xxncsxx escreveu:


Obrigado pelas dicas textmode

O que eu queria era mais ou menos assim

#!/bin/sh
DATA=`date +%d_%m_%Y`
HORA=`date +%H:%M`
MAQUINA=$(hostname -s)
HOST='xxx.xxx.com.br'
USER='XXXXXX'
PASSWD='XXXXXXXX'
FILE='/usr/bin/ARQUIVO.txt'
CAMINHO='/usr/bin/$DATA' (dentro do ftp)

ftp -in /usr/bin/ARQUIVO.txt



Mas ao executar esse script, da o seguinte erro.
?Invalid Command
scrpt: 19: script: Syntax error: "else" unexpected


Pelo que entendi, dentro do FPT (pelo terminal) não reconhece o comando if e else, é isso mesmo?

Como fasso par verificar se uma pasta existe ou nao dentro de um host ftp?
Agora entendi, você já quer enviar o arquivo para o diretório correto. Aí você terá outros problemas, como no shell do ftp não tem estrutura de decisão como no bash, você precisará fazer uma primeira conexão para listar o diretório e armazenar a saída em uma variável e depois de testada esta variável decidir por executar a versão do bloco de comandos FTP com o mkdir ou pela versão sem mkdir. Este método é bem mais trabalhoso do que apenas continuar enviando o arquivo para um diretório existente e fazer o mkdir e rename. A única vantagem do método que você quer seguir é que não haverá mensagem de erro com o mkdir caso o diretório já exista.

6. Re: Script verifica o dia/mes/ano e cria pasta sempre que o dia for outro. [RESOLVIDO]

Enviado em 05/02/2015 - 13:02h

textmode escreveu:

xxncsxx escreveu:


Obrigado pelas dicas textmode

O que eu queria era mais ou menos assim

#!/bin/sh
DATA=`date +%d_%m_%Y`
HORA=`date +%H:%M`
MAQUINA=$(hostname -s)
HOST='xxx.xxx.com.br'
USER='XXXXXX'
PASSWD='XXXXXXXX'
FILE='/usr/bin/ARQUIVO.txt'
CAMINHO='/usr/bin/$DATA' (dentro do ftp)

ftp -in /usr/bin/ARQUIVO.txt



Mas ao executar esse script, da o seguinte erro.
?Invalid Command
scrpt: 19: script: Syntax error: "else" unexpected


Pelo que entendi, dentro do FPT (pelo terminal) não reconhece o comando if e else, é isso mesmo?

Como fasso par verificar se uma pasta existe ou nao dentro de um host ftp?
Agora entendi, você já quer enviar o arquivo para o diretório correto. Aí você terá outros problemas, como no shell do ftp não tem estrutura de decisão como no bash, você precisará fazer uma primeira conexão para listar o diretório e armazenar a saída em uma variável e depois de testada esta variável decidir por executar a versão do bloco de comandos FTP com o mkdir ou pela versão sem mkdir. Este método é bem mais trabalhoso do que apenas continuar enviando o arquivo para um diretório existente e fazer o mkdir e rename. A única vantagem do método que você quer seguir é que não haverá mensagem de erro com o mkdir caso o diretório já exista.



Sei que parecerá exploração e desinteresse meu, mas voce pode fazer um exemplo do script de como ficaria, pq não seu muito em script.

o comando mkdir não tem uma opção de ignorar se ja houver criado? tipo mkdir -p (eu tentei mas acabou criando uma pasta com o nome "-p")

7. Re: Script verifica o dia/mes/ano e cria pasta sempre que o dia for outro. [RESOLVIDO]

Enviado em 05/02/2015 - 19:08h


Eu consegui. Obrigado textmode pela ajuda.
Eu não consegui fazer com que verificasse se ja houvesse a pasta ou nao. O que eu fiz foi deixar o comando mkdir e se houver a pasta ele apenas da um erro (nao substitui) e se nao houver ele cria. Não é como um If e else mas funciona.

Para quem estiver precisando da ideia (pq o codigo é muito simples) vou postar aki para quem precisar.


#!/bin/sh
DATA=`date +%d_%m_%Y`
HORA=`date +%H:%M`
MAQUINA=$(hostname -s)
HOST='xxx.xxx.com.br'
USER='XXXXXX'
PASSWD='XXXXXXXX'
FILE='/usr/bin/ARQUIVO.txt'
CAMINHO='/usr/bin/$DATA'

ftp -in << EOF
open $HOST
user $USER $PASSWD
passive
put $FILE
mkdir /usr/bin/$DATA
rename /usr/bin/ARQUIVO.txt /usr/bin/$DATA/$HORA.$DATA.$MAQUINA.txt
bye
EOF

cat /dev/null > /usr/bin/ARQUIVO.txt

Responder tópico

Responder tópico

Entre na sua conta para responder.

Fazer login para responder