Apagar arquivos com rm da data do dia Anterior

Iniciado por tchibhmg, 29 de Setembro de 2006, 18:13

tópico anterior - próximo tópico

tchibhmg

Opá!

Gostaria de saber como eu faço para apagar arquivos do dia anterior com o comando rm.

Alguem poderia ajudar?

arlei

#1
Se digitar man rm no terminal vera que o comando rm por si, não tem esse tipo de opção. Mais concatenando com outros comando como o grep é possivel se fazer muita coisa.

Tenta isso:

Citar--- comando retirado ---

Nota que no caso passo o parâmetro data especificando o dia de ontem como vc solicitou.

T+
Arlei

Lamego

CUIDADO
Citarrm * |grep `date +%Y-%m-28`
arlei,
sua dica é péssima, manda apagar tudo e depois filtra o resultado do comando !

João Luís Marques Pinto
Mais programs e jogos para o Ubuntu

Darcamo

Jamais tecle enter quando digitar
rm *
a menos que vc leia pelo menos umas 2 ou 3 vezes o comando e realmente tenha certeza de que é isso que quer fazer e, principalmente, que realmente está na pasta certa.

rm * quando se está na pasta home, por exemplo, apaga todos os arquivos do usuário e sem direito a lixeira.

Quer dizer, ele não vai apagar os diretórios, só os arquivos (a menos que vc também tenha colocado a opção -r, aí o problema é maior).

LedStyle

Acho que o certo eh:

ls -l | grep `date +%Y-%m-28`

Isso irá listar os arquivos criados ontem.

Agora pra concatenar isso com o "rm" vai ter que manjar de "cut" ou "sed" e ai já não posso ajudar. Só lendo um pouco a documentação.

[]s

clcampos

Citar
Acho que o certo eh:

Código:


ls -l | grep `date +%Y-%m-28`



Isso irá listar os arquivos criados ontem.

Agora pra concatenar isso com o "rm" vai ter que manjar de "cut" ou "sed" e ai já não posso ajudar. Só lendo um pouco a documentação.

[]s

Bem para solucionar o problema acima basta refazer o comando da seguinte forma:


ls -l | grep `date +%Y-%m-28` | tr -s " " | cut -f8 -d" "


Onde:
   tr -s " "         -> Transforma conjuntos de "caracteres branco" em apenas um branco (" ")
   cut -f8 -d" "   -> Pega apenas o campo 8 (nome do arquivo), usando-se como delimitador um espaço único (" ").

Agora existe como automatizar a tarefa, de forma que a rotina poderia remover os arquivos gerados no dia anterior. Só que se ninguém colocar aqui como fazer até amanha eu faço, pq já são 00:35 h.

[]'s e espero ter ajudado
Cristiano/Timóteo - MG
.: Como Fazer Perguntas de Forma Inteligente :.                
Com dúvida? pesquise!

Felix

Citação de: Darcamo online 29 de Setembro de 2006, 23:03
Jamais tecle enter quando digitar
rm *
a menos que vc leia pelo menos umas 2 ou 3 vezes o comando e realmente tenha certeza de que é isso que quer fazer e, principalmente, que realmente está na pasta certa.

rm * quando se está na pasta home, por exemplo, apaga todos os arquivos do usuário e sem direito a lixeira.

Quer dizer, ele não vai apagar os diretórios, só os arquivos (a menos que vc também tenha colocado a opção -r, aí o problema é maior).

Em um triste dia de minha vida, quando precisava limpar a lixeira de um servidor... achando que estava no diretório .Lixeira ... dei o famigerado comando:

rm -rf * (enter)  :(

...

Após alguns segundos, ouço alguem gritar: "FELIX!!! NÃO ESTÁ ENTRANDO NO SISTEMA!!!" >:(

simplestente, por minha desatenção eu estava no diretório raiz   :o  :-[  :(  :'(

arlei

 :-[
Pô pessoal, verdade.
Na ancia de ajudar acabei passando uma informação completamente equivocada e muitissimo perigosa. Isso acontece quando se tenta ir além de onde realmente podemos chegar. Mais podem apostar que isso me serviu de lição.
Peço desculpas a todos participantes e principalmente ao amigo tchibhmg, que espero não tenha se prejudicado seguindo minha essa equivocada informação.

T+
Arlei

LedStyle

Citação de: arlei online 30 de Setembro de 2006, 10:27
:-[
Pô pessoal, verdade.
Na ancia de ajudar acabei passando uma informação completamente equivocada e muitissimo perigosa. Isso acontece quando se tenta ir além de onde realmente podemos chegar. Mais podem apostar que isso me serviu de lição.
Peço desculpas a todos participantes e principalmente ao amigo tchibhmg, que espero não tenha se prejudicado seguindo minha essa equivocada informação.

T+
Arlei

Acontece com todo mundo hehe.

Eu outro dia mesmo montei uma partição no PC dum amigo e montei 2x. Queria tirar uma pasta e dei rm -rf /media/hdaX la mas eu não desmontei antes. Resultado: Limpei a partição do cara hahah.

Eh soda!

clcampos

#9
Bem, parece ser tarde para a rotina, mas vamos postar uma.

Antes quero dizer que:

1 - A rotina ficou grande para ter consistência de data. Com certeza tem como fazer a rotina menor, mas não pesquisei.
2 - A rotina não informa caso não existam arquivos com a data em questão
3 - A rotina não avisa que terminou, apenas apresenta o prompt
4 - Como o assunto é remoção eu não me responsabilizo por perda de dados (claro... hehe), basta fazer testes antes de colocá-la em uso
5 - Copie o código, cole em um arquivo, mude as permissões dele para execução também e ela vai rodar sem erros.


# Remove arquivos baseados na data de "ontem"
#
# Cristiano
# 30/09/2006
#

# Dia Atual
DIA=`date +'%d'`
# Mes Atual
MES=`date +'%m'`
# Ano Atual
ANO=`date +'%Y'`

case $DIA in
     01)# Para quando o dia atual for igual a 1
        case $MES in
             01) #Para o dia/mes igual a 01/01
                ANO=`expr $ANO - 1`
                MES="12"
                DIA="31"
                ;;
              *) #Para dia = 01 e qualquer outro mes
                MES=`expr $MES - 1`

                case $MES in
                     1 | 3 | 5 | 7 | 8 | 10 | 12) # Mes anterior que termina com dia 31
                                                 DIA="31"
                                                 ;;
                                  4 | 6 | 9 | 11) # Mes anterior que termina com dia 30
                                                 DIA="30"
                                                 ;;
                                               2) # Mes anterior for fevereiro, com consistência de ano bisexto

                                                 RESTO=`expr $ANO % 4`

                                                 if test $RESTO -eq 0; then
                                                    DIA="29"
                                                 else
                                                    DIA="28"
                                                 fi
                                                 ;;
                esac
                ;;
        esac
        ;;
     *)
        DIA=`expr $DIA - 1`
esac

# Formata data para obrigatoriamente AAAA-MM-DD
DATA=`printf "%4s-%2s-%2s" $ANO $MES $DIA | tr -t " " "0"`

# Solicita confirmação para remoção.
clear
echo -e "Deseja remover os arquivos na pasta `pwd`\ncom data de criação igual a \033[1m$DATA\033[0m (s/N)? \c"
read OP_SN

# Formata resposta para letra maiuscula
OP_SN=`echo $OP_SN | tr "a-z" "A-Z"`

# Qualquer resposta diferente de "S" faz o script parar
[ "$OP_SN" != "S" ] && exit
[ "$OP_SN" = "" ] && exit

# Le os arquivo da pasta atual e remove todos os arquivos com data de "ontem"
#
# Caso não exista nenhum arquivo com tal data nada é relatado.
#
for ARQ in `ls -l | grep $DATA | tr -s " " | cut -f8 -d" "`;do
    rm -rf "$ARQ"
done


Espero ter ajudado

OBS.: RESPOSTA EDITADA, MUDANDO LINHA DO CÓDIGO DE:

echo rm -rf "$ARQ"

PARA

rm -rf "$ARQ"
Cristiano/Timóteo - MG
.: Como Fazer Perguntas de Forma Inteligente :.                
Com dúvida? pesquise!

arlei

Citação de: LedStyle online 30 de Setembro de 2006, 16:58
Acontece com todo mundo hehe.

Obrigado pela força amigo LedStyle.
Terei muito mais cuidado que ja tinha daqui para frente, afinal temos que ser precisos e coerentes com o que aqui escrevemos, para que principalmente os recém chegados possam ter a segurança na ajuda que buscam e o nosso fórum manter o grande prestigio que possue.

T+
Arlei

tchibhmg

Opá! Blz Galera Muito obrigado!

Estou fazendo testes com material postato pelos colegas e quando tiver o resultado posto aqui!

Muito boa esta comunidade!!!

Abraços,
Thiago

tchibhmg

Bom Pessoal como disse no Post estou executando em UNIX 5.02 e a formatação da data é a

seguinte: -rw-r-----   1 root     sys         3072 Oct  4 09:27 _q11ep0y.cdx

Como eu faria para pagar com a data neste formato?

Grato pela ajuda de todos!
Thiago

tchibhmg

Ai galera ainda não consegui resolver o problema da Formatação da Data!

Alguem de Ajudar?

Abraços,
Thiago

clcampos

Em primeiro lugar me desculpe pela outra rotina, fiz uma rotina complexa e extensa demais....

Em segundo lugar volto a afirmar que:

1 - Como o assunto é remoção eu não me responsabilizo por perda de dados (claro... hehe), basta fazer testes antes de colocá-la em uso. Para tanto o comando de remoção (rm) de arquivos esta com o comando echo na frente (echo rm -rf "$ARQ"). O comando em questão não permitirá que a remoção aconteça, apenas apresentando qual seria a sintaxe total do arquivo, no estilo:

     rm -rf Arquivo

Quando tiver certeza que o comando esta satisfazendo suas pretenções retire a palavra echo.
2 - Copie o código, cole em um arquivo, mude as permissões dele para execução também e ela vai rodar sem erros.
3 - A rotina funcionará para uma pasta em que a rotina seja sempre usada, já que ela remove arquivos com n dias ou mais
4 - Teste muito a rotina antes de colocá-la em uso
5 - Teste muito a rotina antes de colocá-la em uso
6 - Teste muito a rotina antes de colocá-la em uso


#!/bin/sh
#
# Remove arquivos baseados em uma data.
#
# Cristiano
# 07/10/2006
#

clear
echo -e "\033[1mDigitar <fim> a qualquer momento encerra.\033[0m\n\n"
echo -e "Informe o numero de dias para consulta - \c "

read OP

[[ $OP = [Ff][Ii][Mm] ]] && exit

test ! "$OP" && exit

expr $OP + 1 > /dev/null 2> /dev/null

if test $? -ne 0; then
   echo -e "\nApenas um numero poderia ser digitado.\n"
   exit
fi

# Solicita confirmação para remoção.

echo -e "\n\nDeseja remover os arquivos na pasta `pwd`\ncom data de $OP dias atras? \c"
read OP_SN

# Formata resposta para letra maiuscula
OP_SN=`echo $OP_SN | tr "a-z" "A-Z"`

# Qualquer resposta diferente de S faz o script parar
[ "$OP_SN" != "S" ] && exit
[ "$OP_SN" = "" ] && exit
[[ "$OP_SN" = [Ff][Ii][Mm] ]] && exit

# Le os arquivo da pasta atual e remove todos os arquivos com data de "ontem"
#
# Caso não exista nenhum arquivo com tal data nada é relatado.
#
EXISTEM_ARQ="n"

for ARQ in `find . -mtime +$OP`;do
    echo rm -rf "$ARQ"

    EXISTEM_ARQ="s"
done

if test "$EXISTEM_ARQ" = "n"; then
   echo -e "\n\nNenhum arquivo encontrado.\n\n"
else
   echo -e "\n\nArquivos excluidos.\n\n"
fi
Cristiano/Timóteo - MG
.: Como Fazer Perguntas de Forma Inteligente :.                
Com dúvida? pesquise!