URL: https://www.opennet.me/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID9
Нить номер: 9004
[ Назад ]

Исходное сообщение
"Как найти самый новый по времени создания файл?"

Отправлено Chainikk , 21-Янв-11 19:09 
На сервере есть папка, к которую время от времени скачиваются файлы с данными.
Файлы поступают через разные промежутки времени,
иногда с запозданием на 2-3 дня (как сделает оператор), с разными именами.

Мой скрипт (sh, или можно csh) запускается каждый час,
он должен выбирать из всех файлов в этой директории самый свеже- поступивший файл,
и дальше обрабатывать данные в нем.

Но вот как же выбрать этот самый свежий файл?

Дорогие специалисты, может кто-нибудь сможет мне помочь?


Содержание

Сообщения в этом обсуждении
"Как найти самый новый по времени создания файл?"
Отправлено phpcoder , 21-Янв-11 19:15 
ls -t | head -1

"Как найти самый новый по времени создания файл?"
Отправлено Andrey Mitrofanov , 21-Янв-11 19:19 
> ls -t | head -1

s/-t/-t1/


"Как найти самый новый по времени создания файл?"
Отправлено phpcoder , 21-Янв-11 19:22 
>> ls -t | head -1
> s/-t/-t1/

Не обязательно. -1 включается автоматически при передаче данных в pipe, насколько я помню ;-)

(раньше тоже так писал, ага)



"самый новый"
Отправлено Andrey Mitrofanov , 21-Янв-11 19:16 
find -type f -print0 |xargs -0 stat -c"%Y %n"|sort -k1,1nr|head -1|sed 's_^[^ ]\+ __'

"самый новый"
Отправлено Chainikk , 21-Янв-11 19:39 
Спасибо!!!

Буду пробовать все варианты, результат сообщу!!



"Как найти самый новый по времени создания файл?"
Отправлено shadow_alone , 23-Янв-11 08:29 
ls -tr|tail -n1

"Как найти самый новый по времени создания файл?"
Отправлено pavlinux , 23-Янв-11 22:40 
> Мой скрипт (sh, или можно csh) запускается каждый час,
> Но вот как же выбрать этот самый свежий файл?

А если их за час поступит 2 и больше?

# Раз в час пускать скрипт,
# находить все файлы, новее чем .timeaccessflag

find /var/lib/ftp/inbound  -anewer /var/lib/ftp/inbound/.timeaccessflag;

# Единственный косяк, если во время работы скрипта придёт другой файл.
# А по закону Мерфи, этот косяк произойдёт с самым нужным сообщением и
# в самое неподходящие время.
# Можно как-то блокировать приём, если по IP, то через iptables,
# если по модему/факсу/мобиле, то поднимать трубку.

# в конце скрипта обновить access time у флага.
touch /var/lib/ftp/inbound/.timeaccessflag;

# и возобновить приём.



"Как найти самый новый по времени создания файл?"
Отправлено Chainikk , 24-Янв-11 16:29 
Спасибо огромное всем!! Меня очень заинтересовала команда ls!!

Взяла первый вариант - ls -t | head -1.
Но оказалось, что действительно за час может прийти 2-3 файла:-)).
Оператор их обрабатывает в произвольное время суток,
иногда с задержкой 3 дня и выкладывает сразу все.

Сегодня в 11.36 пришло 2 штуки:
f-22-01-2011.JPG
f-21-01-2011.JPG
И время создания у обоих абсолютно одинаковое - 11:36:00 !! Такого облома я не ожидала!!!

Команда ls -t | head -1 без зазрения совести выдает f-21-01-2011.JPG.
Команда find -type f -print0 |xargs -0 stat -c"%Y %n"|sort -k1,1nr|head -1|sed 's_^[^ ]\+ __' - тоже f-21-01-2011.JPG.

Но ведь понятно, что f-22-01-2011.JPG сделан позже, чем f-21-01-2011.JPG.

Тогда я буду скачивать данные за каждый месяц в отдельную папку,
а внутри папки сортировать по имени!!

Вот так:

cd /f/`date -u +%Y`/`date -u +%m`
file_name=`ls | tail -n1`

Только еще придется в начале месяца проверять новые поступления в папке за предыдущий месяц, вдруг оператор выложит файл за 30 число
в следующем месяце...:-(( Но они пообещали больше недели не задерживать.


"Как найти самый новый по времени создания файл?"
Отправлено pavlinux , 24-Янв-11 16:32 
> И время создания у обоих абсолютно одинаковое - 11:36:00 !! Такого облома
> я не ожидала!!!

Моя говорила :)

> Только еще придется в начале месяца проверять новые поступления в папке
> за предыдущий месяц, вдруг оператор выложит файл за 30 число
> в следующем месяце...:-(( Но они пообещали больше недели не задерживать.

Зачем проверять по несколько раз, сделай как выше написал - со своим флагом.
Все файлы, у которых время модификации меньше чем у флага, считаются новыми.
То есть ты задавай правила игры, а не они.
Может у них другой косяк будет, например, скоро перевод часов на летнее время
или февраль - короткий месяц, хрен знает как у них там работает рассылка.
Может выставлена на 30 число, вот и придёт тебе за 28 февраля только 30 марта,
что явно больше месяца.


"Как найти самый новый по времени создания файл?"
Отправлено Chainikk , 24-Янв-11 16:42 
Язык shell богат и могуч. Я перехитрю операторов:-)


"Как найти самый новый по времени создания файл?"
Отправлено pavlinux , 24-Янв-11 16:48 
> Язык shell богат и могуч. Я перехитрю операторов:-)

Кстати, хороший способ - это перемещать все обработанные файлы в архив (другую папку),
тогда любой файл в рабочем каталоге считается не обработанным.