我有数百个文件格式如下:
A5566.jar Q1223.jar . . . etc
我想有一个脚本,每个。jar文件,创建一个。xml和。trigger文件具有相同的文件名,还创建一个字段内的。xml文件,也有相应的文件名:
A5566.xml Q1223.xml . . . etc ,
和
A5566.trigger Q1223.trigger . . . etc
在每个xml文件里面是:
A5566.xml: “<ID>A5566<ID>”
Q1223.xml: “<ID>Q1223<ID> . . . etc
触发文件内容将为空:
A5566.trigger: “”
Q1223.trigger: “” . . . etc
目标是在脚本运行后保留两个文件夹,一个包含XML文件,另一个包含触发器文件。
到目前为止,我有:
#!/bin/bash
jar_dir=/tmp/jar # we setup a variable with the directory where to search for jars
xml_dir=/tmp/xml # same for the output directory for xmls
trigger_dir=/tmp/trigger # and the trigger directory
# the following creates output directories if they don't exist
# see `man mkdir`
mkdir -p ${xml_dir}
mkdir -p ${trigger_dir}
# we start the for loop through all the files named `*.jar` located in the $jar_dir directory
for f in $(find ${jar_dir} -name "*.jar")
do
file_id=$(basename -s .jar ${f}) # extract the first part of the file name, excluding .jar
# echo prints something, < and > are escaped characters
# and the `>` you see just before ${xml_dir} redirects the output of the last command (echo)
# to the file ${xml_dir}/${file_id}.xml, with the variables replaced
echo <id>${file_id}</id> > ${xml_dir}/${file_id}.xml
touch ${trigger_dir}/${file_id}.trigger # this one just creates an empty file at ${trigger_dir}/${file_id}.trigger
done
我真的不知道我是否正确地在包含所有jar文件(jar)的特定文件夹中运行这个脚本,并让它创建另外两个文件夹(xml)和(trigger),包含新生成的文件。
find
对于该任务来说是多余的,并且如果文件名包含空白,则在for
循环中不起作用。使用globs(而不是find
)和参数展开(而不是basename
):
#!/bin/bash
jar_dir=/tmp/jar
xml_dir=/tmp/xml
trigger_dir=/tmp/trigger
mkdir -p "$xml_dir" "$trigger_dir"
cd "$jar_dir" || exit
for file in *.jar; do
id=${file%.jar} # get rid of the extension .jar
echo "<ID>$id<ID>" > "$xml_dir/$id.xml"
: > "$trigger_dir/$id.trigger"
done