Inicialmente este blog foi criado para armazenar algumas dicas e links de UNIX/Linux, OpenVMS, linguagem C, Assembly, TCP/IP e nerdezas afins. No entanto devido ao autor ter abandonado o seu plano de ser um super hacker e dominar o mundo (devido esposa, família, filhos, trabalho), a partir de 2012 este blog tem um tipo de nerdeza mais light (Android, Linux, RetroPie (retrogames), produtividade, e por aí vai). Estas dicas raramente serão criações minhas.

segunda-feira, 20 de junho de 2016

este blog tem uma nova casa

Estou migrando para o github. Agora este blog está em http://meleu.github.io/blog/.

sexta-feira, 6 de maio de 2016

fazer o find parar depois do primeiro match

Estava fazendo um script para abrir um determinado arquivo baseado no que era encontrado através de um find. O problema é que as vezes o find encontrava mais de um arquivo que atendia o critério de busca, e eu gostaria de parar no primeiro arquivo encontrado. Uma rápida googlada e a solução apareceu...

Fazer o comando find parar após o primeiro arquivo encontrado:

find caminho/do/diretorio -name nome-do-arquivo -print -quit
Simples assim!

Aritmética de datas em shell scripts

Estava eu felizinho e tranquilo fazendo um scriptzinho aqui para me ajudar em algumas coisas do trabalho, quando esbarrei no problema da aritmética de datas.

O caso é o seguinte: tenho um arquivo (planilha excel) onde todos os dias preencho várias informações, e às 17h eu tenho que fechar este arquivo e abrir um novo que se encerrará às 17h do dia seguinte. O meu objetivo era fazer um script onde eu pudesse passar uma data na linha de comando e ele já abrisse diretamente o arquivo referente a esta data. Útil para consultar os arquivos de dias anteriores.

O problema que encontrei foi que o nome dos arquivos contem a data de fechamento daquele arquivo e a data anterior, exemplo: "Dados 01-05-2016 a 02-05-2016.xls". Isso é um problema pois não é uma matemática tão simples fazer o script saber qual é o dia anterior de uma determinada data. Alguns meses tem 28, 29, 30 ou 31 dias...

Numa rápida googlada achei uma solução simples, bonita e elegante:

date -d "2016-05-01 - 1 day"

Para obter a data no formato desejado basta usar o caractere de formatação '%', de acordo com o que é mostrado na manpage. No meu caso fica assim:

date -d "2016-05-01 - 1 day" +%d-%m-%Y

(OBS.: pelo que andei lendo esse recurso de aritmética de datas é uma feature do GNU date. Portanto funcionará em qualquer distro Linux moderna, porém não funciona no date do BSD, que é o utilizado nos SOs da Apple.)

tags