Se você quer um one-liner para isso, use zsh. É um pouco enigmático, como a maioria dos usos avançados de qualificadores glob .
echo *(/e\''set -- $REPLY/**/*(Nm-30[1]); ((!$#))'\')
O outer glob corresponde apenas aos diretórios ( /
) de forma que a expressão ( e
) dentro do singlequotes seja verdadeira. A expressão usa o diretório correspondente ( $REPLY
) e procura abaixo dela ( **/
) para arquivos modificados nos últimos 30 dias ( m-30
), sem causar um erro se nenhum arquivo corresponder ( N
) e somente mantendo a primeira correspondência ( [1]
). A expressão é verdadeira se não houver correspondência.
Outro método é listar os diretórios com arquivos recentes, depois tomar o complemento da lista.
comm -13 <(find . -mtime -30 | sed -e '/^\.$/ d' -e 's~^\./~~' -e 's~/.*~~' | sort -u) \
<(find . -type d -name . -o -prune -print | sed -e 's~^\./~~')