sexta-feira, 4 de outubro de 2013

Validação de Datas em Bash

Para fazer uma validação de um numero inteiro se ele representa uma data válida é possível utilizar o seguinte comando shell:

if (date --date 20050214 > /dev/null 2>&1); then echo "data valida"; else echo "data INVALIDA" ; fi

isto foi utilizado para selecionar um conjunto de arquivos que varia em um intervalo de dias, da seguinte maneira

data_inicio='20050115'
data_fim='20050215'
dir_dados='/dados'

for a in $( seq ${data_inicio} ${data_fim})
do
  if (date --date "$a" > /dev/null 2>&1)
    then
      #echo "data valida"
      ls -d "${dir_dados}/*${a}*" >> ${lista_W}
  fi
done


Que neste caso joga para uma lista o path com os dados para serem utilizados em outro processo.

terça-feira, 1 de outubro de 2013

Como identificar o último dia do mês

Estive procurando uma forma para saber qual o último dia do mês corrente, e encontrei uma referência que fazia uma tabela como esta apresentada abaixo.

Jan - 31 days
Feb - 28 days / 29 days (leap year)
Mar - 31 days
Apr - 30 days
May - 31 days
Jun - 30 days
Jul - 31 days
Aug - 31 days
Sep - 30 days
Oct - 31 days
Nov - 30 days
Dec - 31 days

Para isto foi utilizado o seguinte código bash:

for m in {1..12}; do
  date -d "$m/1 + 1 month - 1 day" "+%b - %d days"; 
done

Portanto, adaptando este código podemos fazer o seguinte

data_atual="20131001"
ultimodia=$(date -d "${data_atual} + 1 month - 1 day" +%Y%m%d )
echo ${ultimodia}
% 20131031

A principal diferença é que estamos passando o ano que pretendemos avaliar e com isto saber se é biossesto ou não.

segunda-feira, 4 de fevereiro de 2013

Como renomear arquivos no linux

Para converter os nomes de um conjunto de arquivos para que todas as letras fiquem minúscula basta utilizar o seguinte comando:

rename 'y/A-Z/a-z/' *

Todos os arquivos no diretório corrente serão convertidos.

Fonte de referência: http://www.cyberciti.biz/tips/renaming-multiple-files-at-a-shell-prompt.html