Hier ist eine Bash-Lösung.
f30days=$(date +%s --date="-30 days")
for file in 20*.txt; do
fdate=$(echo $file | tr _ -)
fsec=$(date +%s --date=${fdate/.txt/})
if [[ $fsec -lt $f30days ]]; then
echo "rm $file"
fi
done
Ich beendete es mit "echo rm $file
" Anstatt Ihre Dateien wirklich zu löschen, wird das Ergebnis vorher getestet.
Mit zsh
:
zmodload zsh/datetime
strftime -s start '%Y_%m_%d.txt' $((EPOCHSECONDS - 30*86400))
echo -E rm -i 2*.txt(e:'[[ $REPLY > $start ]]':)
Entfernen Sie die echo -E
wenn glücklich.
Auf einem GNU-System und mit der GNU-Shell (bash
), könnten Sie etwas Annähern tun mit:
start=$(date -d '30 days ago' +%Y_%m_%d.txt)
list=()
shopt -s nullglob
for file in 2*.txt; do
[[ $file > $start ]] && list+=("$file")
done
if (( ${#list[@]} > 0)); then
echo -E rm -i "${list[@]}"
fi