У меня есть два каталога.
/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 :-)