# -----------------------------------------------------
# Find and delete files with old timestamps.
# -----------------------------------------------------
(find ${DIRPREFIX} -type f -printf '%T@ %TY%Tm%Td%TH%TM %p\n') | while read acsd acsdf fn
do
if [ ${acsd} -le ${LACD} ]; then
echo -e "DEL:F: ${fn} - AS EXPIRED DATE ${acsdf}\r" >> ${RPNAME}
rm -f "${fn}"
else
EXPDAYS=$((${acsd} - ${LACD}))
EXPDAYS=$((${EXPDAYS}/24/3600))
echo -e "SKIP: $fn. THEY HAVE A ${EXPDAYS} DAYS REMAINED.\r" >> ${RPNAME}
fi
done
# -----------------------------------------------------
# Find and delete links with old timestamps.
# -----------------------------------------------------
(find ${DIRPREFIX} -type l -printf '%T@ %TY%Tm%Td%TH%TM %p\n') | while read acsd acsdf fn
do
if [ ${acsd} -le ${LACD} ]; then
echo -e "DEL:L: ${fn} - AS EXPIRED DATE ${acsdf}\r" >> ${RPNAME}
rm -f "${fn}"
else
EXPDAYS=$((${acsd} - ${LACD}))
EXPDAYS=$((${EXPDAYS}/24/3600))
echo -e "SKIP: $fn. THEY HAVE A ${EXPDAYS} DAYS REMAINED.\r" >> ${RPNAME}
fi
done
# -----------------------------------------------------
# Find and delete empty directories.
# -----------------------------------------------------
(find ${DIRPREFIX} -type d -empty -printf '%T@ %b %d %p\n') | while read acsd szb fdetpth fn
do
if [ ${fdetpth} -le 0 ]; then
echo -e "BASEDIR: ${fn} - NOT PROCESSED \r" >> ${RPNAME}
else
echo -e "RMDIR - ZERO SIZE: ${fn}, ${fdetpth}\r" >> ${RPNAME}
rmdir "${fn}"
fi
done
Да... Вспомнил, почему так длинно и запутано.
Если это шара самбы (типа временного мусоросборника),
и если она используется пользователями windows, то работает только
вот такой "длинный" способ. Не знаю уж почему - но вот так.
Предположение - в неправильной обработке find длинных имен файлов.
Можете ради интереса запустить регулярный ежедневный процесс и понаблюдать.