скрипт в Shell'e - нужен совет :-)

visualic

Member
Joined
Apr 19, 2006
Messages
17
Reaction score
52
Привет, форумчане.
Заранее извиняюсь, если не совсем попал в нужный раздел, но мне кажется именно здесь большинство людей, хорошо понимающих шелл.

Есть у меня одна проблема, которую хочется решить, но так как знания shell не очень хорошие, то не знаю, как к ней подойти. Поэтому прошу Вашего совета.
Итак.

имею каталог, скажем, /tmp/data/, в котором хранятся множество файлов известного мне формата. Причем данные постоянно в этот каталог добавляются. Есть парсер, который некоторым образом изменяет эти данные. Работает он по STDIN, STDOUT.
То есть, если я пишу такую команду типа ./parser.pl < /tmp/data/filename1 > /tmp/parsed_data/filename1.parsed, то парсер по некоторому правилу парсит данные в файле и помещает обработанный файл filename1.parsed в каталог /tmp/parsed_data/
Проблема такая, нужно это дело автоматизировать. То есть нужно, чтобы по крону запускался скриптик, который бы все текущие файлы в каталоге /tmp/data/ парсил и перемещал (mv) в каталог /tmp/parsed_data/ с изменением имени (точнее с добавлением '.parsed'). При этом очень не хотелось бы лезть в этот parser.pl, так как это черный ящик :) Нужно также учесть, что в момент работы скрипта в каталог могут попасть новые файлы и чтобы скрипт не переместил их без преобразования.

Прошу подсказать способ, как это можно реализовать, но желательно более доступный для понимания начинающего shell-иста.

Большое Спасибо.
 
Last edited by a moderator:

Uzbeche

Member
Joined
Jul 18, 2004
Messages
9
Reaction score
1
Напиши самый простенький скрипт, который проходится по всем файлам в директории (for $i in `ls ...` do) , запускает на каждый из них перловский скрипт с параметром $i вместо имени файла. Файлы, добавившиеся после запуска скрипта, он не тронет, но обработает их в следующий раз
 

Mikerl

Member
Joined
Nov 16, 2005
Messages
35
Reaction score
14
Location
MSK
Была у меня аналогичная задача. Решил написанием скрипта со вставкой его в crontab с нужной периодичностью. Скрипт делает простую вещь:
1. формирует через ls список файлов в /tmp/data/ с упорядочиванием по времени создания. Удаляет из списка последний, может, еще не закрытый файл. Список запихивает в файл.
2. скармливает по списку файлы парсеру за исключением самого свежего файла.
3. mv (или rm) куда надо

Все. В твоем случае, может быть, последний файл из (1) удалять не нужно, если ты уверен, что он закрыт.
 

visualic

Member
Joined
Apr 19, 2006
Messages
17
Reaction score
52
большое спасибо всем. В принципе алгоритм ясен, дальше буду думать.
 
Top