Excluir diretórios datados de janeiro de 2010 no Linux

1

Eu quero usar o seguinte comando para excluir diretórios datados somente de janeiro de 2010

ls -lh | awk '{print $6 " " $9}' | sed -n '/Jan/p' | awk '{print $2}' >>/tmp/file_list

O comando acima listará todos os diretórios datados de Jan, mas eu tenho em minha lista Jan 2010 e Jan 2011.

Alguém pode me ajudar com o comando SED para listar apenas os diretórios em Jan, 2010?

    
por AlBouazizi 02.08.2011 / 07:58

2 respostas

1

Você pode usar grep em vez de awk / sed, talvez algo assim?

ls -lh | grep -o 'Jan [ 1-2][0-9]  2010 .*$' | awk '{print $4}' >> /tmp/file_list

O problema com o que você tem é o primeiro awk não está incluindo os anos, então 2011 (ou 2009, 2008, etc) todos aparecem na lista que é enviada para sed.

    
por 02.08.2011 / 09:04
2

Nunca tente analisar a saída de ls para fins que não sejam de exibição --- é uma idéia ruim .

Embora use find e xargs em vez de sed, talvez algo assim funcionasse. Note que não foi testado.

jan01="$(date -d '20100101 00:00' +%s)"
feb01="$(date -d '20100201 00:00' +%s)"

today="$(date -d '23:59:59' +%s)"

daysecs="$((24*60*60))" # 86400 

dayssincefeb01="$(((today - feb01) / daysecs ))"
dayssincejan01="$(((today - jan01 + 1) / daysecs ))"

find /path -type d -mtime +"$dayssincefeb01" -mtime -"$dayssincejan01" \
-print0 | xargs -0 rm -r

O comando find no final encontra diretórios com mais de 01 de fevereiro de 2010, mas com menos de 01 de janeiro de 2010, e os canaliza com segurança para xargs usando o caractere '%code%' null.

    
por 02.08.2011 / 09:39

Tags