我为自己的工作开始编写shell脚本,但我必须承认,即使是新手也离我很远。因此,我想请你帮忙/建议。
我为大数据应用程序构建了一个脚本(采用快速而肮脏的方法,将来自互联网的东西一起修补)以递归方式通过文件夹结构并将所有XML文件转换为JSON。
我的脚本的现状是:
#!/bin/sh
# Shell script to find out all the files under a directory and
#its subdirectories. This also takes into consideration those files
#or directories which have spaces or newlines in their names
cd /Users/q337498/Desktop/Archiv/2014/01/10
DIR="."
function list_files()
{
if !(test -d "$1")
then echo $1; return;
fi
cd "$1"
#echo; echo `pwd`:; #Display Directory name
for i in *
do
if test -d "$i"; then # if dictionary
if [ "$(ls -A $i)" ]; then
list_files "$i" #recursively list files
cd ..
else
echo "$i is Empty"
fi
else
java -jar /Users/q337498/Desktop/XML2JSON/SaxonEE9-5-1-4J/saxon9ee.jar -s:"$i" -xsl:/Users/q337498/Desktop/xsltjson-master/conf/xml-to-json.xsl -o:output/$(pwd)/${i%%[.]*}
# if jsonlint /Users/q337498/Desktop/Archiv/2014/01/08/$(pwd)/${i%%[.]*} -q; then
# echo "GOOD"
# else
# echo "NOT GOOD"
# fi
# echo ${i%%[.]*}
# echo "$i"; #Display File name
fi
done
}
if [ $# -eq 0 ]
then list_files .
exit 0
fi
for i in $*
do
DIR="$1"
list_files "$DIR"
shift 1 #To read next directory/file namedone
done
此代码有效,但问题是对于60000个文件,在16GB RAM和2.8 Ghz i7的macbook pro上需要长达15个小时。我需要转换1000万个文件。
您认为我如何加速剧本?并行?拿出一些命令?我有什么选择,我将如何实际实现它们?
这些文件最终会以MongoDB结尾,所以如果有人知道将xml转换为json并将其上传到mongo的更好方法,那么他的输入也是受欢迎的。
干杯,
嘟嘟
答案 0 :(得分:0)
我在这里看到2个直接问题:
所以我建议你: