Назад | Перейти на главную страницу

Переместить самый старый файл через cron

У меня есть два каталога.

/application/inbox
/application/unresponsive

Приложение ищет файлы * .txt во входящих и работает с ними. Периодически приложение сохраняет записи из этих файлов в файлы с указанием даты (2009-07-31) в папке, не отвечающей на запросы.

Я хотел бы настроить задание cron, которое работает один раз в день, чтобы переместить самый старый файл из неотвечающего ящика в папку «Входящие», добавив расширение * .txt, чтобы приложение подхватило его.

Непроверено, скорее всего глючит:

#!/bin/sh

# last file in list sorted newest->oldest
OLDEST=$(ls -t /application/unresponsive | tail -1)

# make sure $OLDEST isn't empty string
if [ -n $OLDEST ]; then
    # quote in case of spaces and remove directory name
    mv "$OLDEST" /application/inbox/$(basename "$OLDEST").txt
fi

Если вы хотите, чтобы он работал с файлами с пробелами (более надежный). Вы должны перебрать их и использовать оператор сравнения -nt (самый новый на основе времени изменения) или -ot (самый старый) с базовым алгоритмом минимума / максимума. Вот пример из этого отличный BashFAQ:

files=(*) newest=${f[0]}
for f in "${files[@]}"; do
  if [[ $f -nt $newest ]]; then
    newest=$f
  fi
done

Итак, ваш пример будет (непроверенным):

files=(/application/inbox/*) oldest=${f[0]}
for f in "${files[@]}"; do
  if [[ $f -ot $oldest ]]; then
    oldest=$f
  fi
mv "$oldest" /application/unresponsive/
done

Узнать, как не Я думаю, лучше использовать вывод ls. Вот ссылка к аргументу почему. Но я оставляю вам решать, правда ли это или просто чушь псевдо-unix-guru :-)