Removendo arquivos com mais de 1 mês, mas deixando arquivos criados no primeiro dia do mês

2

Estou tentando remover alguns arquivos de uma pasta em um servidor de arquivos do CentOS com um cronjob. Os requisitos:

  1. Remover arquivos do último mês
  2. O arquivo .tgz do primeiro dia do mês deve ser deixado intacto.

Eu sei que posso remover arquivos com mais de x dias com:

find /path -mtime +30 -exec rm {} \;

No entanto, isso não deixará em paz o arquivo criado no primeiro dia do mês. A internet não parece estar fornecendo uma resposta (ainda).

    
por Robert 01.03.2013 / 10:38

1 resposta

3

Primeiro uma nota

Em sistemas de arquivos unix você não tem informações sobre o tempo de criação de um arquivo. O que é frequentemente chamado de ctime é o status de alteração de status de um arquivo. Isso pode ser alterado por renomeação de arquivos ou alterações de permissão.

Veja este link para obter mais informações.

Portanto, esteja avisado que a seguinte solução pode estar falhando.

Solução com a ajuda de awk

find não tem operador para selecionar uma data especial. Então o truque é para criar uma saída com o dia do mês e o nome do arquivo e usando um separador que não faz parte dos nomes de arquivos. Eu assumo que # é um possível separador de caracteres.

 find . -mtime +30 -printf "%Cd#%p\n"

Em uma segunda etapa, você pode filtrar os arquivos indesejados.

 find . -mtime +30 -printf '%Cd#%p\n' |awk -F'#' '$1 !~ /^01/{print $2;}'

Solução com a ajuda de grep e cut

Fazendo o mesmo truque acima.

 find . -mtime +30 -printf '%Cd#%p\n' |grep -v '^01' |cut -d '#' -f 2
    
por 02.03.2013 / 19:57