Я запускаю задание cron, которое запрашивает снимок с удаленной веб-камеры по локальному адресу:
wget http://user:pass@10.0.0.50/snapshot.cgi
Это создает файлы snapshot.cgi
, snapshot.cgi.1
, snapshot.cgi.2
, каждый раз, когда он запускается.
Я хотел бы, чтобы файл назывался как file.1.jpg
, file.2.jpg
. Как правило, последовательно или по дате / времени именованные файлы с правильным расширением файла вместо .cgi
.
Любые идеи?
Вы, наверное, могли бы заставить wget это сделать, но зачем? Пытаться
wget http://user:pass@10.0.0.50/snapshot.cgi
mv snapshot.cgi snapshot-`date +%Y-%m-%d-%H%M%S`.jpeg
Это должно создать изображения с отметкой даты и времени, например snapshot-2011-04-12-081649.jpeg
. Это подойдет?
редактировать: Ок, мучений особо не надо:
wget -O snapshot-`date +%Y-%m-%d-%H%M%S`.jpeg http://user:pass@10.0.0.50/snapshot.cgi
Но большинство из меня по-прежнему предпочитает UNIX-способ делать это с помощью небольших дискретных инструментов.
Вы можете сделать это с помощью простого цикла bash и -O
вариант в wget.
Что-то вроде этого:
i=0
while 1
do
# increment our counter
((i++))
# get the file and save it
wget -O file.$i.jpg http://user:pass@10.0.0.50/snapshot.cgi
# presumably you want to wait some time after each retrieval
sleep 30
done
Одно очевидное раздражение заключается в том, что если у вас уже есть файл file.1.jpg в каталоге и вы запустите этот сценарий, он будет перезаписан. Чтобы справиться с этим, вам сначала нужно найти все существующие файлы file.N.jpg, найти наибольшее значение для N и начать с N + 1. Вот невероятно безумный способ сделать это:
# find the last sequential file:
i=$(ls -t file.*.jpg | head -1 | awk -F. '{ print $2}')
# if there weren't any matching files, force $i to 0
[ $i > 0 ] || i=0
# increment by one to get your starting value for $i
((i++))
# and then start your capture mechanism
while 1
do
# increment our counter
((i++))
# get the file and save it
wget -O file.$i.jpg http://user:pass@10.0.0.50/snapshot.cgi
# presumably you want to wait some time after each retrieval
sleep 30
done
На самом деле мне следовало бы переписать все это как однострочник на Perl, но я устал и уже поздно, так что мне будет лень. В любом случае, это должно дать вам представление о том, как этого добиться с помощью простого механизма сценария оболочки.