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 d
a primeira parte diz ao find para pesquisar somente diretórios -
! -wholename
exclui 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.