Provavelmente, é possível fazer isso sem criar arquivos usando a substituição de processos ou algo assim, mas aqui está uma solução rápida e suja:
find . -type f -mtime +30 -printf '%h\n' | sort | uniq > old.txt
find . -type f -mtime -30 -printf '%h\n' | sort | uniq > new.txt
grep -vf new.txt old.txt
O primeiro comando gera o caminho de cada arquivo modificado há mais de 30 dias (em -printf
do find - pelo menos com o GNU encontrado no meu sistema - %h
imprime o caminho inteiro, exceto o nome real do arquivo) , então, ordena e remove todas as duplicatas, e coloca tudo em um arquivo chamado old.txt
.
O segundo comando faz o mesmo, mas com todos os arquivos modificados há menos de 30 dias, e os coloca em outro arquivo, new.txt
.
A linha grep imprime todas as linhas do arquivo antigo.txt que não aparecem no arquivo novo.txt - portanto, ele fornecerá uma lista dos diretórios que contêm apenas arquivos que foram modificados pela última vez mais de 30 dias atrás.
Isso tudo está usando as versões GNU dos utilitários. Não sei se a sintaxe corresponde às versões do BSD, etc.