У меня есть Perl-скрипт (или любой исполняемый файл) E, который возьмет файл foo.xml и напишет файл foo.txt. Я использую кластер Beowulf для запуска E для большого количества XML-файлов, но я хотел бы написать простой сценарий сервера заданий в оболочке (bash), который не перезаписывает существующие текстовые файлы.
Я сейчас делаю что-то вроде
#!/bin/sh
PATTERN="[A-Z]*0[1-2][a-j]"; # this matches foo in all cases
todo=`ls *.xml | grep $PATTERN -o`;
isdone=`ls *.txt | grep $PATTERN -o`;
whatsleft=todo - isdone; # what's the unix magic?
#tack on the .xml prefix with sed or something
#and then call the job server;
jobserve E "$whatsleft";
и тогда я не знаю, как получить разницу между $ todo и $ isdone. Я бы предпочел использовать sort / uniq чему-то вроде цикла for с grep внутри, но я не уверен, как это сделать (каналы? Временные файлы?)
В качестве дополнительного вопроса, есть ли способ выполнить поиск в bash grep?
Для выяснения / расширения проблемы:
У меня есть несколько программ, которые получают данные из таких источников, как (но не обязательно), data / {branch} / special / {pattern} .xml и записывают выходные данные в другой каталог результатов / special / {branch} - {pattern} .txt (или данные / {ветвь} / промежуточный / {шаблон} .dat, например). Я хочу проверить в своем скрипте для поиска работы, существует ли этот файл.
Таким образом, E преобразует данные / {branch} / special / {pattern} .xml-> results / special / {branch} - {pattern} .dat, например. Я хочу посмотреть на каждый экземпляр ввода и проверить, существует ли выход. Один (по общему признанию более простой) способ сделать это - просто прикоснуться к файлам * .done рядом с каждым входным файлом и проверить эти результаты, но я бы предпочел не управлять ими, и иногда задания завершаются ненадлежащим образом, поэтому я их не хочу помечено сделано.
N.B. Мне пока не нужно проверять параллелизм или блокировать какие-либо файлы.
Таким образом, простой и понятный способ решения вышеуказанной проблемы (в псевдокоде) может быть
for i in `/bin/ls *.xml`
do
replace xml suffix with txt
if [that file exists]
add to whatsleft list
end
done
но я ищу что-то более общее.