Com zsh
, você pode fazer algo como
# get current date (YYMM) in a variable
crd=$(date "+%y%m")
# use a function to extract the 13 chars that make up the timestamp
dtts() REPLY=${${REPLY%%.*}: -13}
# sort file names by the timestamp in descending order, exclude the ones with the
# same YYMM as the current date and set the remaining file names as arguments
set -- *(.O+dtts^e_'[[ "${${REPLY%%.*}: -13:4}" == "$crd" ]]'_)
# remove the first item from the list (i.e. the last one before current month)
shift
# print the remaining file names
print -rl -- "$@"
Isso usa a expansão de parâmetros e os qualificadores da glob :
ele primeiro seleciona os arquivos regulares (.) classifica em ordem decrescente ( O
) pelo timestamp usando a função dtts
, então o e
string ^e_'[[ "${${REPLY%%.*}: -13:4}" == "$crd" ]]'_
deseleciona os arquivos se o registro de data e hora corresponder ao ano e mês atuais a expressão dentro de citações retorna true); shift
, em seguida, remove o primeiro item da lista (desde que os nomes foram classificados em ordem decrescente, que seria o último registro de data e hora anterior ao mês atual)
Substitua print -rl
por rm
se você estiver satisfeito com o resultado.