<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>CODARE &#187; Thobias Salazar Trevisan</title>
	<atom:link href="http://codare.net/author/thobias/feed/" rel="self" type="application/rss+xml" />
	<link>http://codare.net</link>
	<description>Programadores, uni-vos!</description>
	<lastBuildDate>Fri, 03 Dec 2010 21:34:06 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.2.1</generator>
		<item>
		<title>Shell: Redimensionar imagens na linha de comando</title>
		<link>http://codare.net/2007/01/05/shell-redimensionar-imagens-na-linha-de-comando/</link>
		<comments>http://codare.net/2007/01/05/shell-redimensionar-imagens-na-linha-de-comando/#comments</comments>
		<pubDate>Fri, 05 Jan 2007 11:26:32 +0000</pubDate>
		<dc:creator>Thobias Salazar Trevisan</dc:creator>
				<category><![CDATA[Shell]]></category>

		<guid isPermaLink="false">http://codare.wordpress.com/2006/11/23/redimensionar-imagens-na-linha-de-comando/</guid>
		<description><![CDATA[Palavras-chave: shell, convert, ImageMagick, redimensionar, resize, thumbnail, imagem, foto O ImageMagick é um conjunto de softwares para manipular vários formatos de imagens. Esta dica aborda como redimensionar imagens. Dentre os programas do ImageMagick está o comando convert, que possui várias &#8230; <a href="http://codare.net/2007/01/05/shell-redimensionar-imagens-na-linha-de-comando/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Palavras-chave: shell, convert, ImageMagick, redimensionar, resize, thumbnail, imagem, foto</p>
<p>O <a href="http://www.imagemagick.org">ImageMagick</a> é um conjunto de softwares para manipular vários formatos de imagens. Esta dica aborda como redimensionar imagens.</p>
<p>Dentre os programas do ImageMagick está o comando <a href="http://imagemagick.sourceforge.net/http/www/convert.html">convert</a>, que possui várias opções para manipular imagens.  Para redimensionar utilizamos a seguinte sintaxe:</p>
<pre>
convert -resize &lt;largura&gt;x&lt;altura&gt; arquivo_original arquivo_novo
</pre>
<p>Exemplo prático: Criar um thumbnail do arquivo imagem.jpg.</p>
<pre>
convert -resize 120x120 imagem.jpg thumbnail_imagem.jpg
</pre>
<p>Pode-se ainda redimensionar a imagem e, ao mesmo tempo, converter para outro formato. Por exemplo, criar o thumbnail como PNG:</p>
<pre>
convert -resize 120x120 imagem.jpg thumbnail_imagem.png
</pre>
<p>Como último exemplo, um script que cria thumbnails para todos os arquivos JPG do diretório corrente e cria uma página HTML para visualizar as imagens:</p>
<pre>
#!/bin/bash

for i in *.jpg; do
  echo "Gerando thumbnail da imagem $i..."
  convert -resize 120x120 $i thumbnail_$i
  echo "&lt;a href=\"$i\"&gt; &lt;img src=\"thumbnail_$i\"&gt; &lt;/a&gt;" &gt;&gt; index.html
done
</pre>
<p>Agora é só abrir o arquivo index.html no seu navegador favorito.</p>
<p>Mais detalhes: man convert</p>
]]></content:encoded>
			<wfw:commentRss>http://codare.net/2007/01/05/shell-redimensionar-imagens-na-linha-de-comando/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>Shell: Conteúdo de variável dentro de outra variável (eval)</title>
		<link>http://codare.net/2006/12/22/shell-conteudo-de-variavel-dentro-de-outra-variavel-eval/</link>
		<comments>http://codare.net/2006/12/22/shell-conteudo-de-variavel-dentro-de-outra-variavel-eval/#comments</comments>
		<pubDate>Fri, 22 Dec 2006 12:03:25 +0000</pubDate>
		<dc:creator>Thobias Salazar Trevisan</dc:creator>
				<category><![CDATA[Shell]]></category>

		<guid isPermaLink="false">http://codare.net/2006/12/22/conteudo-de-variavel-dentro-de-outra-variavel/</guid>
		<description><![CDATA[Palavras-chave: shell, variável dentro de variável, eval Às vezes precisamos pegar o conteúdo de uma variável cujo nome está contido em outra variável. Será mostrado algumas maneiras de realizar esta tarefa: $ A=XXX $ B=A $ echo $B A $ &#8230; <a href="http://codare.net/2006/12/22/shell-conteudo-de-variavel-dentro-de-outra-variavel-eval/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Palavras-chave: shell, variável dentro de variável, eval</p>
<p>Às vezes precisamos pegar o conteúdo de uma variável cujo nome está contido em outra variável. Será mostrado algumas maneiras de realizar esta tarefa:</p>
<pre>
$ A=XXX
$ B=A
$ echo $B
A
$ echo ${!B}
XXX
$ eval echo \\$$B
XXX
$ eval echo '$'$B
XXX
</pre>
<p>Exemplo prático:</p>
<pre>
#!/bin/bash

VERDE="echo -en &#92;&#92;e[1;32m"
AZUL="echo -en &#92;&#92;e[1;36m"
VERMELHO="echo -en &#92;&#92;e[1;31m"
NORMAL="echo -en &#92;&#92;e[0;39m"

# função que imprime um texto colorido
imprime_colorido() {
   eval \\$$1   # seta para a cor passada (primeiro parâmetro)
   shift
   echo $*     # imprime o texto
   $NORMAL     # volta para a cor padrão
}

imprime_colorido VERDE texto em verde
imprime_colorido AZUL texto em azul
imprime_colorido VERMELHO texto em vermelho
</pre>
<p>Outra situação é quando precisamos obter o conteúdo de uma variável cujo pedaço do nome está contido em outra variável:</p>
<pre>
$ passo1=codificar
$ passo2=testar

$ i=1
$ eval echo \\$passo$i
codificar

$ i=2
$ eval echo '$passo'$i
testar

$ tmp=passo$i   # usando uma variável temporária
$ echo ${!tmp}
testar

$ for i in 1 2; do eval echo passo$i = '$passo'$i; done
passo1 = codificar
passo2 = testar
</pre>
]]></content:encoded>
			<wfw:commentRss>http://codare.net/2006/12/22/shell-conteudo-de-variavel-dentro-de-outra-variavel-eval/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Shell: Erro: Argument list too long</title>
		<link>http://codare.net/2006/11/08/shell-erro-argument-list-too-long/</link>
		<comments>http://codare.net/2006/11/08/shell-erro-argument-list-too-long/#comments</comments>
		<pubDate>Wed, 08 Nov 2006 18:28:38 +0000</pubDate>
		<dc:creator>Thobias Salazar Trevisan</dc:creator>
				<category><![CDATA[Shell]]></category>

		<guid isPermaLink="false">http://codare.wordpress.com/2006/11/08/erro-argument-list-too-long/</guid>
		<description><![CDATA[Palavras-chave: shell, Argument list too long, /bin/rm, /bin/mv, bash, ksh, sh Sistemas operacionais UNIX normalmente têm um tamanho fixo de memória que pode ser utilizada para variáveis de ambiente e argumentos na chamada de um programa. Este tamanho varia de &#8230; <a href="http://codare.net/2006/11/08/shell-erro-argument-list-too-long/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Palavras-chave: shell, Argument list too long, /bin/rm, /bin/mv, bash, ksh, sh</p>
<p>Sistemas operacionais UNIX normalmente têm um tamanho fixo de memória que pode ser utilizada para variáveis de ambiente e argumentos na chamada de um programa. Este tamanho varia de sistema operacional para sistema operacional. Para obter este valor pode-se executar o seguinte comando:</p>
<pre>
$ getconf ARG_MAX
131072
</pre>
<p>Quando executamos algum comando e passamos (incluindo o nome, o caminho do programa e variáveis de ambiente) uma quantidade de argumentos que supere o definido em ARG_MAX o programa é terminado com a seguinte mensagem:</p>
<p>shell: comando: Argument list too long</p>
<p>Vamos simular este comportamento criando uma grande quantidade de arquivos em um diretório. O número de arquivos que precisam ser criados pode variar de acordo com o tamanho definido em ARG_MAX.</p>
<pre>
$ for i in $(seq 1 50000); do touch $i; done
$ rm *
bash: /bin/rm: Argument list too long
$ ls *
bash: /bin/ls: Argument list too long
$ mv * /tmp/
/bin/bash: /bin/mv: Argument list too long
$ grep a *
bash: /bin/grep: Argument list too long
$ chmod 555 *
bash: /bin/chmod: Argument list too long
</pre>
<p>Existem várias maneiras de contornar este &#8220;problema&#8221;. Serão listadas algumas:</p>
<pre>
$ find . -name '*' -print0 | xargs -0 rm
$ find . -type f -print0 | xargs -0 rm
$ find . -type f -exec rm {} \\;
$ echo * | xargs rm
</pre>
<p>Dica: usando o xargs é mais rápido!</p>
<p>Um leitor mais atendo notaria que a última solução apresentada não poderia funcionar, já que o * utilizado seria expandido para todos os arquivos e excederia o tamanho definido em ARG_MAX.</p>
<p>O echo é um comando builtin do shell, ou seja, um novo programa não é executado (chamada de sistema exec não é invocada). Se utilizarmos o comando echo do sistema operacional  o erro será mostrado:</p>
<pre>
$ /bin/echo *
bash: /bin/echo: Argument list too long
$ echo *
lista de todos os arquivos do diretório
</pre>
<p>A solução com echo não funciona se existir espaços em branco no nome dos arquivos.</p>
]]></content:encoded>
			<wfw:commentRss>http://codare.net/2006/11/08/shell-erro-argument-list-too-long/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Shell: Converter datas de e para Unix timestamp</title>
		<link>http://codare.net/2006/10/06/shell-converter-datas-de-e-para-unix-timestamp/</link>
		<comments>http://codare.net/2006/10/06/shell-converter-datas-de-e-para-unix-timestamp/#comments</comments>
		<pubDate>Sat, 07 Oct 2006 00:48:54 +0000</pubDate>
		<dc:creator>Thobias Salazar Trevisan</dc:creator>
				<category><![CDATA[Shell]]></category>

		<guid isPermaLink="false">http://codare.wordpress.com/2006/10/06/converter-datas-de-unix-timestamp-para-um-formato-legivel/</guid>
		<description><![CDATA[Palavras-chave: shell, datas, date, awk, unix timestamp, posix time, unix time, unix epoch Maneiras rápidas de converter de Unix timestamp para um formato mais amigável: GNU date date -d '1/1/1970 + 1158857787 seconds' date -d '1/1/1970 + 1158857787 seconds' '+%d/%m/%Y &#8230; <a href="http://codare.net/2006/10/06/shell-converter-datas-de-e-para-unix-timestamp/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Palavras-chave: shell, datas, date, awk, unix timestamp, posix time, unix time, unix epoch</p>
<p>Maneiras rápidas de converter de <a href="http://en.wikipedia.org/wiki/Unix_timestamp">Unix timestamp</a> para um formato mais amigável:</p>
<dl>
<dt>GNU date</dt>
<dd>
<pre>
date -d '1/1/1970 + 1158857787 seconds'
date -d '1/1/1970 + 1158857787 seconds' '+%d/%m/%Y %H:%M:%S %z'
</pre>
</dd>
<dt>BSD date</dt>
<dd>
<pre>
date -r 1158857787
</pre>
</dd>
<dt>GNU Awk</dt>
<dd>
<pre>
echo 1158857787 | awk '{print strftime("%c",$1)}'
awk 'BEGIN {print strftime("%c",1158857787)}'
awk 'BEGIN {print strftime("%d/%m/%Y %H:%M:%S %z",1158857787)}'
</pre>
</dd>
</dl>
<p>Para fazer o caminho inverso, a partir de uma data gerar o Unix timestamp:</p>
<dl>
<dt>GNU e BSD date</dt>
<dd>
<pre>
date +%s   # unix timestamp de agora
</pre>
</dd>
<dt>GNU date</dt>
<dd>
<pre>
date -d '09/21/2006 13:56:27' +%s   # de uma data específica
</pre>
</dd>
<dt>GNU Awk</dt>
<dd>
<pre>
awk 'BEGIN {print mktime("2006 09 21 13 56 27")}'
</pre>
</dd>
</dl>
<p>Observação: Você pode ter diferença de algumas horas dependendo do seu timezone.</p>
]]></content:encoded>
			<wfw:commentRss>http://codare.net/2006/10/06/shell-converter-datas-de-e-para-unix-timestamp/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
	</channel>
</rss>

