【发布时间】:2024-05-01 13:40:02
【问题描述】:
我有复杂的要求:
1)我需要连续扫描目录 1 并从 xml 列表中提取一个元素。
2)根据元素,检查文件(元素)是否存在于目录2中
3)如果存在则将 xml 文件复制到目录 2
4)继续这个循环
XML 示例:
<?xml Version="1.0" encoding="UTF-8" standalone="no"?>
<Data xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<Main>
<Rec>Bank</Rec>
</Main>
<Code>124</Code>
<City></City>
<CompCodes>
<CompCode>US</CompCode>
<Vend>13</Vend>
<File_name>abc.txt</File_name>
</CompCodes>
<BankData>
<Code>123</Code>
<BankAcctNum>231</BankAcctNum>
</BankData>
<BankData>
<Code>124</Code>
<BankAcctNum>431</BankAcctNum>
</BankData>
</Data>
我尝试使用下面的脚本,但它没有做它应该做的事情:
#!/usr/bin/env bash
dir_list1=(
/data/test/
)
search_for_files() {
local dir=$(cd "$1"; pwd)
local target=/data/test2/
shopt -s nullglob
for file in "$dir"/*xml; do
pdf=$(grep -oPm1 "(?<=<File_name>)[^<]+" <<< "$file")
#base=${file%.*}
#base=${base##*/}
if [-d "$target/$pdf" ]; then
cp $dir/$file $target
fi
done
}
for file in "${dir_list1[@]}"; do
search_for_files "$dir"
done
感谢任何帮助!
【问题讨论】:
-
尝试将代码粘贴到 shellcheck.net
-
[-d "$target/$pdf" ]如果是文件,应该使用[-f "$target/$pdf" ] -
有人称它为summoning the daemon,其他人称它为the Call for Cthulhu,很少有人称它为turned mad and met the Pony。简而言之,永远不要使用正则表达式解析 XML 或 HTML!您是否尝试过诸如
xmlstarlet、xmllint或xsltproc之类的 XML 解析器?