Como excluir todas as 3 subpastas mais recentes em uma pasta?
Você pode usar find
, sort
, awk
, xargs
e finalmente rm
:
find * -maxdepth 0 -type d -not -path "current" -not -path "shared" -printf "%T@ %p\n" | sort -nr | awk 'NR > 3 {print $2}' | xargs rm -rf
Repartição:
find
ferramenta versátil para procurar por arquivos e diretórios e, possivelmente, executar comandos neles
*
leva em consideração elementos na pasta atual
-maxdepth 0
não procura em subpastas
-type d
procura diretórios
-not -path "current"
exclui o diretório chamado "atual"
-not -path "shared"
exclui o diretório chamado "shared"
-printf "%T@ %p\n"
imprime os resultados, anexando o registro de data e hora na frente dos nomes dos diretórios. Isso pode ser omitido no seu caso, uma vez que os diretórios já estão com registro de data e hora.
| sort -nr
classifica a lista de acordo com o timestamp, na ordem inversa
| awk 'NR > 3 {print $2}'
imprime todos, exceto os três primeiros resultados, omitindo o registro de data e hora que foi adicionado anteriormente. É aqui que você escolhe quantos para manter, basta substituir o número 3
| xargs rm -rf
exclua esses diretórios e todo o conteúdo deles
Editar: no seu caso, como os nomes dos diretórios já começam com um registro de data e hora, não há necessidade de adicionar o registro de data e hora novamente para que sort -nr
seja efetivo. Observe que a sintaxe awk
precisa ser editada de acordo.
find * -maxdepth 0 -type d -not -path "current" -not -path "shared" | sort -nr | awk 'NR > 3 {print $0}' | xargs rm -rf