Я пытаюсь запустить аргумент командной строки в каталоге, полном файлов. Файлы называются номерами в порядке возрастания.
1815837.xml
1815838.xml
1815839.xml
1815840.xml
Можно ли написать какой-то скрипт, чтобы взять все файлы в каталоге и один за другим передать их через следующую команду (Stanford NER):
java -mx600m -cp /home/matthias/Workbench/SUTD/nytimes_corpus/NER/stanford-ner-2015-01-30/stanford-ner-3.5.1.jar edu.stanford.nlp.ie.crf.CRFClassifier -loadClassifier /home/matthias/Workbench/SUTD/nytimes_corpus/NER/stanford-ner-2015-01-30/classifiers/english.all.3class.distsim.crf.ser.gz -textFile 1815838.xml -outputFormat inlineXML >> 1815838_output.xml
Этот код, который я вызываю, выводит результат на консоль, поэтому я передаю его в специально названный файл, то есть >> 1815838_output.xml
Важно, чтобы я поддерживал это соглашение об именах.
Возможно ли запустить этот код для каждого файла в каталоге и сохранить результат соответственно с помощью короткой java-программы или сценария bash? Как бы это выглядело?
Этот вопрос косвенно связан с предыдущим исследованием.
Мое туманное понятие выглядит примерно так:
*X* = '1815838'
while(still files in directory)
{
java -mx600m -cp stanford-ner-2015-01-30/stanford-ner-3.5.1.jar edu.stanford.nlp.ie.crf.CRFClassifier -loadClassifier english.all.3class.distsim.crf.ser.gz -textFile *X*.xml -outputFormat inlineXML >> *X* + '_output.xml'
X--
}
На мой взгляд, это работает, но я не знаю, действительно ли это, или если бы это работало в реальной жизни, я искал Google и не нашел ничего подобного, но, может быть, я не знал точно, что спросить. Это разумно? Может кто-нибудь может показать мне дорогу?
ОБНОВИТЬ
-rwxr-xr-x 1 matthias matthias 3.8K Apr 10 20:35 1815851.xml*
-rw-r--r-- 1 matthias matthias 4.6K Apr 12 16:25 1815851_output.xml
-rw-r--r-- 1 matthias matthias 5.3K Apr 12 16:25 1815851_output_output.xml
-rwxr-xr-x 1 matthias matthias 3.3K Apr 10 20:35 1815852.xml*
-rw-r--r-- 1 matthias matthias 4.5K Apr 12 16:25 1815852_output.xml
-rw-r--r-- 1 matthias matthias 5.6K Apr 12 16:25 1815852_output_output.xml
-rwxr-xr-x 1 matthias matthias 2.5K Apr 10 20:35 1815853.xml*
-rw-r--r-- 1 matthias matthias 2.9K Apr 12 16:25 1815853_output.xml
-rw-r--r-- 1 matthias matthias 3.3K Apr 12 16:25 1815853_output_output.xml
-rwxr-xr-x 1 matthias matthias 2.4K Apr 10 20:35 1815854.xml*
-rw-r--r-- 1 matthias matthias 2.7K Apr 12 16:25 1815854_output.xml
-rw-r--r-- 1 matthias matthias 2.9K Apr 12 16:25 1815854_output_output.xml
-rwxr-xr-x 1 matthias matthias 2.8K Apr 10 20:35 1815855.xml*
-rw-r--r-- 1 matthias matthias 3.6K Apr 12 16:25 1815855_output.xml
-rw-r--r-- 1 matthias matthias 4.4K Apr 12 16:26 1815855_output_output.xml
без цикла, но также, как ни странно, ничего не вышло на вывод
g="$(1816001.xml $f .xml)_output.xml"
java -mx600m -cp /home/matthias/Workbench/SUTD/nytimes_corpus/NER/stanford-ner-2015-01-30/stanford-ner-3.5.1.jar edu.stanford.nlp.ie.crf.CRFClassifier -loadClassifier /home/matthias/Workbench/SUTD/nytimes_corpus/NER/stanford-ner-2015-01-30/classifiers/english.all.3class.distsim.crf.ser.gz -textFile $f -outputFormat inlineXML > $g
Это легко сделать: Предполагая, что ваш текущий каталог находится там, где находятся файлы:
for f in *.xml ; do
echo $f | grep -q '_output\.xml$' && continue # skip output files
g="$(basename $f .xml)_output.xml"
command a_lot_of_arguments $f more_arguments >> $g
done
Хотя мне интересно, хотите ли вы >>
или >
для перенаправления. Первый будет добавляться к выходному файлу, если он уже существует, например, из предыдущего запуска того же скрипта. Последний перезапишет его.