bash脚本来导航目录子结构,然后对.xml文件进行操作

Smatthewenglish

我很累:

for dir in /home/matthias/Workbench/SUTD/nytimes_corpus/NYTimesCorpus/2007/02/*/
    for f in *.xml ; do
        echo $f | grep -q '_output\.xml$' && continue # skip output files
        g="$(basename $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
    done
done

这是基于此问题的答案,但没有用。

我有一个文件夹结构,这样在目录中NYTimesCorpus有一个目录2007,在该目录中01还有02,,03依此类推...

然后内01再有010203,...

在这些终端目录的每个目录中,有许多我要对其应用脚本的.xml文件:

for f in *.xml ; do
    echo $f | grep -q '_output\.xml$' && continue # skip output files
    g="$(basename $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
done

但是目录太多了,在每个目录中运行它是一种罕见的折磨。除了2007我还有2006and之外2005,因此理想情况下,我想做的是运行一次,让程序自行导航该结构。

到目前为止,我的尝试还没有成功,也许你们当中的一个会知道如何实现这一目标?

谢谢您的考虑。

更新

textFile=./scrypt.sh
outputFormat=inlineXML
Loading classifier from /home/matthias/Workbench/SUTD/nytimes_corpus/NER/stanford-ner-2015-01-30/classifiers/english.all.3class.distsim.crf.ser.gz ... done [2.2 sec].
CRFClassifier tagged 71 words in 5 documents at 959.46 words per second.
CRFClassifier invoked on Sun Apr 12 19:33:34 HKT 2015 with arguments:
   -loadClassifier /home/matthias/Workbench/SUTD/nytimes_corpus/NER/stanford-ner-2015-01-30/classifiers/english.all.3class.distsim.crf.ser.gz -textFile ./scrypt.sh -outputFormat inlineXML
    loadClassifier=/home/matthias/Workbench/SUTD/nytimes_corpus/NER/stanford-ner-2015-01-30/classifiers/english.all.3class.distsim.crf.ser.gz
格伦·杰克曼

find是一个很好的解决方案。听起来所有xml文件都位于同一目录深度,所以请尝试以下操作:

dir=/home/matthias/Workbench/SUTD/nytimes_corpus
for f in $dir/NYTimesCorpus/*/*/*/*.xml; do
    [[ $f == *_output.xml ]] && continue # skip output files
    g="${f%.xml}_output.xml"
    java -mx600m \
         -cp $dir/NER/stanford-ner-2015-01-30/stanford-ner-3.5.1.jar \
         edu.stanford.nlp.ie.crf.CRFClassifier \
         -loadClassifier $dir/NER/stanford-ner-2015-01-30/classifiers/english.all.3class.distsim.crf.ser.gz \
         -textFile "$f" \
         -outputFormat inlineXML > "$g"
done

全局模式$dir/NYTimesCorpus/*/*/*/*.xml指定所需的xml文件位于NYTimesCorpus的正下方3个级别。那是错误的深度,然后更改*/图案中的数量

如果xml文件可以以不同的深度出现,请使用find或以bash的形式使用:

shopt -s globstar nullglob
for f in $dir/NYTimesCorpus/**/*.xml; do

参考

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

bash脚本来与多个文件进行交互

如何从操作文件进行导航调用

如何编写一个 bash 脚本来读取用户的输入然后写入文件

当bash脚本来自时,如何知道它的安装目录。操作员?

对目录中的多个文件进行操作

Bash脚本来计算路径中的文件类型(包括子文件夹)

Bash Shell脚本来查找和删除文件名中的子字符串

bash脚本将文件从深层目录结构中移出

bash脚本来备份文件

Bash脚本来编辑Excel文件

Bash脚本来编辑.ics文件

根据子元素对XML文件进行排序

对当前目录下的文件进行操作并放入新目录

通过SSH与文件io操作进行Lua脚本

如何使用批处理脚本对目录中的每个文件进行操作

Bash 脚本 7za 目录中的所有文件,然后重命名文件

对所有子目录中的文件子集中的字符串进行bash递归操作

使用bash脚本对特定结构文件进行改组

bash脚本编写-wget或curl文件是否基于状态200进行操作

单个文本文件需要使用shell或bash脚本进行多项操作

PowerShell-对文件夹和子文件夹中的文件进行操作

bash列出所有目录,子目录,文件夹,子文件夹,然后输出到单独的文件

如何编写bash脚本来报告计算机状态并有条件地对其进行ping操作?

Bash脚本来备份我的“主”文件夹

无限循环bash脚本来检查和处理文件

Bash脚本来查找,处理和重命名文件?

bash脚本来压缩多个域文件夹

Bash脚本来移位txt文件中的数字

按属性对XML文件进行排序,但保留其父结构[动态]