Обычно вы используете:
find . -mtime +3 -exec rm {} ';'
или что-то подобное (т. Е. Могут быть другие ограничивающие предложения, такие как -type f
для обычных файлов или -maxdepth 0
только для текущего каталога, без подкаталогов). -mtime +3
получает только те файлы, дата модификации которых составляет 3 дня или более.
Выполните man find
в вашей системе для получения полной информации. Имеет ли Solaris те же функции, что и GNU, я не знаю. Это может быть более ограниченным (или лучше).
Обновление: Пожалуйста, во имя тех богов, которым вы поклоняетесь, пожалуйста, сначала проверьте команду с echo
вместо rm
. Я не несу ответственности за уничтожение ваших файлов, если вы доверяете совету «какого-то случайного парня в сети, который может иметь или не иметь ваших интересов в глубине души»: -)
И, прежде чем кто-то запрыгнет и ругает меня за то, что я не использую xargs
(или, что еще лучше, find -print0
с xargs -0
, где доступно), я знаю. Но это не относится к конкретному вопросу под рукой. ОП может задать другой вопрос, если и когда производительность find -exec
является проблемой.
Если у вас есть определенный формат файла с датой в нем (как вы указали в своем комментарии), вы можете фактически использовать mdel
в ftp
. Рассмотрим следующий скрипт:
# The prefix and suffix of files to delete.
prefix='*_'
suffix='-i.tbl'
# Create FTP script file.
rm -rf temp.ftp
echo "user pax pax_password" >>temp.ftp
echo "cd /my/directory" >>temp.ftp
echo "prompt" >>temp.ftp
# Get current date.
y=$(date +%Y)
m=$(date +%m)
d=$(date +%d)
((lasty = y - 1))
((lastm = m - 1))
# If past Jan 3, delete all of previous year.
if [[ $m -gt 1 || $d -gt 3 ]] ; then
echo "mdel ${prefix}${lasty}????${suffix}" >>temp.ftp
fi
# If past Jan and past the third, delete all of previous month.
if [[ $m -gt 1 && $d -gt 3 ]] ; then
if [[ ${lastm} -lt 10 ]] ; then
echo "mdel ${prefix}${y}0${lastm}??${suffix}" >>temp.ftp
else
echo "mdel ${prefix}${y}${lastm}??${suffix}" >>temp.ftp
fi
fi
# If past the third, delete current month more than three days old.
if [[ $d -gt 3 ]] ; then
((d = d - 3))
if [[ ${m} -lt 10 ]] ; then
m="0${m}"
fi
while [[ ${d} -gt 0 ]] ; do
if [[ ${d} -lt 10 ]] ; then
echo "mdel ${prefix}${y}${m}0${d}${suffix}" >>temp.ftp
else
echo "mdel ${prefix}${y}${m}${d}${suffix}" >>temp.ftp
fi
((d = d - 1))
done
fi
# Finalise script and run it.
echo "bye" >>temp.ftp
ftp -n mymachine.com <temp.ftp
rm -rf temp.ftp
Кроме небольшого раздражения, когда у вас может оставаться до шести дней файлов на границах месяца, это делает то, что вам нужно. Конечно, вы могли бы сделать код, обрабатывающий границы месяца, немного более разумным, если это действительно важно.
Просто запускайте этот скрипт на своем ящике каждый день, и он будет очищать файлы на целевом ящике с помощью стандартного инструмента ftp
. Я все еще думаю, что проще запустить find
на сервере, но я представлю эту опцию, если этот путь недоступен.