Aqui está uma função do shell que depende do utilitário stat
; chame-o com um parâmetro de diretório opcional (o padrão é .
, o diretório atual) e ele executará um rm
interativo do arquivo mais antigo. Para jogar um pouco de cautela ao vento, remova o -i
flag para rm
. Ele intencionalmente ignora diretórios e, portanto, investiga apenas arquivos no diretório fornecido. Para lidar de maneira limpa com diretórios vazios, adicionei algumas shopt
de soluções alternativas. Isso deve, no entanto, lidar (assim como pode) com arquivos que possuem espaços e novas linhas em seus nomes.
function rmoldest {
shoptnow=$(shopt -p nullglob)
shopt -s nullglob
tstamp=$(date +%s)
file=
dir=$1
dir=${dir:-.}
for f in "$dir"/*
do
if [ ! -d "$f" ]
then
y=$(stat -c "%Y" "$f")
if [ $y -lt $tstamp ]
then
file="$f"
tstamp=$y
fi
fi
done
$shoptnow
if [ -n "$file" ]
then
/bin/rm -i "$file"
fi
}
Aqui está uma amostra de execução (os $
principais são meus prompts do shell, não os digita):
$ touch sample.txt; sleep 1; touch 'sample.txt '
$ ls -l
total 0
-rw-r--r-- 1 Jeff None 0 Mar 21 22:02 sample.txt
-rw-r--r-- 1 Jeff None 0 Mar 21 22:02 sample.txt
$ rmoldest
/bin/rm: remove regular empty file ‘./sample.txt’? y
$ ls -l
total 0
-rw-r--r-- 1 Jeff None 0 Mar 21 22:02 sample.txt
$ rmoldest
/bin/rm: remove regular empty file ‘./sample.txt ’? y
$ ls -l
total 0