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

Использование wget для сохранения последовательных файлов, а также переименования расширения файла

Я запускаю задание 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, но я устал и уже поздно, так что мне будет лень. В любом случае, это должно дать вам представление о том, как этого добиться с помощью простого механизма сценария оболочки.