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

visualic

Турист
Привет, форумчане.
Заранее извиняюсь, если не совсем попал в нужный раздел, но мне кажется именно здесь большинство людей, хорошо понимающих шелл.

Есть у меня одна проблема, которую хочется решить, но так как знания 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

Турист
Напиши самый простенький скрипт, который проходится по всем файлам в директории (for $i in `ls ...` do) , запускает на каждый из них перловский скрипт с параметром $i вместо имени файла. Файлы, добавившиеся после запуска скрипта, он не тронет, но обработает их в следующий раз
 

Mikerl

Турист
Была у меня аналогичная задача. Решил написанием скрипта со вставкой его в crontab с нужной периодичностью. Скрипт делает простую вещь:
1. формирует через ls список файлов в /tmp/data/ с упорядочиванием по времени создания. Удаляет из списка последний, может, еще не закрытый файл. Список запихивает в файл.
2. скармливает по списку файлы парсеру за исключением самого свежего файла.
3. mv (или rm) куда надо

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

visualic

Турист
большое спасибо всем. В принципе алгоритм ясен, дальше буду думать.
 
Top