Aqui está uma maneira de fazer isso usando find .
find -type d ! -wholename $(find -type d -printf '%T+ %p\n' | sort -r | head -1 | cut -d" " -f2) ! -wholename "." -exec rm -r {} +
Falha no comando:
-
find -type da primeira parte diz ao find para pesquisar somente diretórios -
! -wholenameexclui ocorrências com o seguinte nome completo. A parte seguinte (entre$()) é avaliada e usada como nome de arquivo aqui-
$(find -type d -printf '%T+ %p\n' |imprime timestamps para diretórios -
sort -r |classifica-os do mais novo para o mais antigo -
head -1 |leva apenas a primeira linha (diretório mais recente) -
cut -d" " -f2)remove o registro de data e hora da saída
-
-
! -wholename "."exclui ocorrências com o nome completo.. Você não pode remover o diretório em que você está trabalhando. -
-exec rm -r {} +remove os arquivos correspondentes.
Você deve executar o comando sem a última parte ( -exec rm -r {} + ) primeiro, para ver quais diretórios serão removidos.
Exemplo:
conteúdo do diretório:
Aug 4 14:38 bar/
Aug 4 14:38 bla
Aug 4 14:38 foo/
Aug 4 14:41 foobar/
comando de execução:
find -type d ! -wholename $(find -type d -printf '%T+ %p\n' | sort -r | head -1 | cut -d" " -f2) ! -wholename "." -exec rm -r {} +
conteúdo resultante do diretório:
Aug 4 14:38 bla
Aug 4 14:41 foobar/
observe que bla é um arquivo e não um diretório. Por isso, não será removido.