Os curingas expandem os nomes dos arquivos em ordem lexicográfica. Como seu formato de data corresponde à ordem lexicográfica, sua necessidade resume-se a manter as últimas correspondências X para um caractere curinga (ou todas as correspondências, se houver menos de X). Assumirei que seus backups são os arquivos correspondentes a $device.*
, ajuste o padrão conforme necessário.
No zsh:
set -- $device.*
if [[ $# -gt $X ]]; then set -- $@{[-$X,-1]}; fi
cp -- $@ /retain/area/
Em qualquer shell do estilo Bourne (ash, bash, ksh,…):
set -- "$device".*
if [ $# -gt $X ]; then shift $(($#-$X)); fi
cp -- "$@" /retain/area
Se o que você deseja é, de fato, remover arquivos mais antigos, você precisa agir nas primeiras correspondências, exceto X (ou nenhuma correspondência se houver menos que X).
No zsh:
files=($device.*)
rm -f -- $files[1,-$X-1]
Em outros shells:
set -- "$device".*
while [ $# -gt $X ]; do
rm -- "$1"
shift
done