Kurt Kraut

batendo tambor com o Ubuntu

HD da mãe Joana

Computadores apesar de parecerem os detentores da organização são incrivelmente propensos a se desordenarem. Na verdade, a culpa é nossa. Somos nós que colocamos cabos ao leo e arquivos a propria sorte. Se já era difícil manter meu HD em ordem quando minha conexão era de apenas 1mb, agora com 4Mb/s essa missão tem sido impossível. Tudo que vou recebendo via IRC, IM, e-mail, ftp ou baixo manualmente vai se amontoando em algumas pastas até se tornar um volume incompreensível de arquivos onde se acha nada.

A solução que encontrei foi de autosabotagem, inspirada numa dieta estranha que ouvi dizer em que você deve grudar na porta da geladeira todas as fotos de quando era magro para se lembrar que um dia você já foi daquele jeito. No meu computador, a solução foi: remover os arquivos baixados caso eu não os organize.

A lógica é bem simples: dentro da minha home tenho uma pasta chamada downloads, e nela vem pastas de cada programa que utilizo para baixar arquivos (Firefox, Gaim, Xchat etc). E lá vão se acumulando tudo o que baixo no computador. Configurei no crontab, um agendador de tarefas, para que semanalmente exclua TODO o conteúdo destas pastas. Como a remoção pode acontecer a qualquer momento, desde daqui a 15min até daqui a 7 dias, sou obrigado a assim que baixar algo, descompactar ou dar o devido tratamento e salvar em uma pasta específica (como musicas, imagens, designs ou documentos), devidamente classificado ou simplesmente deixar apagar-se sozinho como um PDF que baixei só para dar uma olhada.

Para isso, digitei o comando:

crontab -e

Que irá editar a minha crontab. Irá aparecer um editor de texto e a seguinte linha:

# m h dom mon dow command

Ela serve como referência e não deve ser alterada. É bem simples de entender. Esse arquivo é constituído de 6 colunas, separadas por espaço. Onde:

m – minutos (de 00 a 59)

h – horas (de 0 a 23)

dom – dia do mês (1 a 31)

dow – dia da semana (do inglês, sun mon tue wed fri sat)

command – comando a ser executado

Então caso eu queira rodar um comando a cada 15 minutos, as segundas-feiras eu teria que incluir a seguinte linha linha:

15 * * * mon comando

Mas como rodar algum comando semanalmente ? Existem alguns atalhos compreendidos pelo crontab:

@reboot – executar cada vez que o computador foi reiniciado.
@hourly – executar a cada hora
@daily
– executar diariamente
@weekly – executar semanalmente
@monthly – executar mensalmente
@yearly – executar anualmente

Eles são bastante úteis pois, caso uma tarefa esteja agendada para um horário que o computador esteja desligado, quando ele for ligado depois desse horário, a tarefa não será cumprida. Ele não registra ‘tarefas pendentes’. De acordo com Rudnicki, esses atalhos precedidos de arroba podem atuar sim como pendentes e serem executados assim que o computador for ligado.

Então, meu crontab ficaria assim:

# m h dom mon dow command
@weekly rm -rf /home/ktk/downloads/firefox/*

Há de fato algum risco na configuração que defini. Risco de imediatamente após o término da transferência ou durante de um arquivo, dele ser apagado pela infeliz coincidência do crontab entrar em ação. Por conta disso, nosso amigo Carlos Romel propôs nos comentários desse post uma solução. Um script bash que apaga somente os arquivos com mais de 7 dias de idade. Então, faz sentido adicionarmos este script com o valor @reboot. Primeiro, vamos ao código fonte do script:

#!/bin/bash
#
# Elimina os arquivos com mais de sete dias;
#
for d in /home/ktk/downloads/firefox; do

find $d -type f -mtime +7 -exec rm –force “{}” \;

#
# Removemos os diretóios vazios
#
find $d/* -type d -print0 | \
sort –zero-terminated –reverse | \
xargs –no-run-if-empty –null –max-args 1 rmdir 2> /dev/null
done

Vamos salvar este script em /home/meulogin/scripts/limpardownloads.sh. Para que esse arquivo seja interpretado como um executável, devemos digitar:

chmod +x /home/ktk/scripts/limpardownloads.sh

E adicionar no crontab:

# m h dom mon dow command
@reboot /home/ktk/scripts/limpardownloads.sh

E está tudo feito. A partir de agora, basta se policiar para organizar bem os arquivos😀 Como dizem os filmes de espionagem… ‘Esta pasta se autodestruirá em 5. 4, 3, 2 1…’.

Obrigado pelos comentários. Ajudaram a estabelecer uma solução melhor.

November 19, 2006 - Posted by | Planetas

10 Comments »

  1. Tá ! Tudo bem ! Mas não seria menos arriscado se reorganizar sem uma bomba na sua cabeça ?

    A maior parte das pessoas faria o mais simples, moveria o conteúdo /home/ktk/downloads/firefox/* para outro lugar e deixaria para se organizar depois, ou seja, correria riscos e ainda não faria o que tem que ser feito !!!

    Comment by J. F. Mitre | November 19, 2006 | Reply

  2. Entendo, mas aí a síndrome de Scarlett O’Hara persiste: amanhã organizo. E amanhã nunca chega😛
    .
    Mas parando para analisar, se a maioria do que eu baixo fica perdido num punhado de arquivos significa que a maioria dos downloads não me interessa e médio/longo prazo. Logo, considerando os meus hábitos, acredito que permitirei que a maioria do que eu baixo seja apagado automaticamente. Só a menor parte que eu acho relevante é que será guardada devidamente categorizada num local apropriado.

    Comment by KurtKraut | November 19, 2006 | Reply

  3. Olá.

    Você poderia usar o seguinte roteiro:

    — 8 /dev/null
    done
    — >8 —

    Que Deus te abençoe.

    Comment by Carlos Romel | November 20, 2006 | Reply

  4. Olá.

    Você poderia usar o seguinte roteiro

    #!/bin/bash

    #
    # Elimina os arquivos com mais de sete dias;
    #
    for d in /home/ktk/downloads/firefox; do

    find $d -type f -mtime +7 -exec rm –force “{}” \;

    #
    # Removemos os diretóios vazios
    #
    find $d/* -type d -print0 | \
    sort –zero-terminated –reverse | \
    xargs –no-run-if-empty –null –max-args 1 rmdir 2> /dev/null
    done

    Que Deus te abençoe.

    Comment by Carlos Romel | November 20, 2006 | Reply

  5. Gostei da sua idéia vou usa-lá em partes, vou colocar uma tarefa no cron como diária com o find procurando e deletando arquivos mais velhos que 7 dias😀 assim dá o efeito seu esperado e não corro o risco de deletar arquivos que acabei de baixar !

    Comment by Alexandre Possebom | November 20, 2006 | Reply

  6. Aloha,

    Fiquei surpreso com os comentários e a sugestão do script do Romel. Nem tinha pensado nisso e parece bastante óbvio e eficaz. Vou adotar de fato isso. Eu queria era uma desculpa, um cenário para explorar o crontab e acabei não dando atenção a verossimilhança do exemplo que eu propunha.

    Com o script proposto pelo Romel ficamos aqui com uma solução bem eficiente para organização e limpeza de downloads que certamente servirá para muita gente.

    Muito obrigado por comentarem este artigo.

    Comment by KurtKraut | November 20, 2006 | Reply

  7. Uma alternativa legal é o “rm-old-files” (http://rm-old-files.sourceforge.net/) que possue um arquivo de configuração onde dá pra agender facilmente o que deve ser apagado. depois eh soh agendar a execução dele no cron.

    Comment by Wagner | November 20, 2006 | Reply

  8. Dicas muito úteis. Valeu mesmo!😉

    Comment by Guilherme | November 22, 2006 | Reply

  9. […] HD da mãe Joana Limpando o HD periodicamente (tags: Linux Ubuntu) […]

    Pingback by links for 2006-11-23 por BrPoint | November 23, 2006 | Reply

  10. Obrigado pela visita e pela dica (será postada). Té mais.

    Comment by André | December 6, 2006 | Reply


Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s

%d bloggers like this: