如何编写一个脚本,遍历文件夹并使用给定的参数创建新的文件/文件内容



我有数百个文件格式如下:

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

相关内容

  • 没有找到相关文章

最新更新