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

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

Nilton
xxncsxx

(usa Kali)

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?


  


2. MELHOR RESPOSTA

Perfil removido
removido

(usa Nenhuma)

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]

Perfil removido
removido

(usa Nenhuma)

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]

Nilton
xxncsxx

(usa Kali)

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]

Perfil removido
removido

(usa Nenhuma)

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]

Nilton
xxncsxx

(usa Kali)

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]

Nilton
xxncsxx

(usa Kali)

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







Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts