Linux 连续扫描目录并执行操作
我有复杂的要求,其中: 1) 我需要连续扫描目录1并从XML列表中提取一个元素 2) 根据元素,检查文件(元素)是否存在于目录2中 3) 如果存在,则将xml文件复制到目录2 4) 继续这个循环 XML示例:Linux 连续扫描目录并执行操作,linux,bash,shell,unix,Linux,Bash,Shell,Unix,我有复杂的要求,其中: 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>
<?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
#/usr/bin/env bash
目录列表1=(
/数据/测试/
)
搜索\u以查找\u文件(){
本地目录=$(cd“$1”;pwd)
本地目标=/data/test2/
shopt-s nullglob
对于“$dir”/*xml;do”中的文件
pdf=$(grep-oPm1“(?脚本中出现了多个错误,下面是更正的版本:
我已经注释掉了含铁的线条,并在下方放置了更正的线条
#!/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")
pdf=$(grep -oPm1 "(?<=<File_name>)[^<]+" < "$file")
#base=${file%.*}
#base=${base##*/}
#if [-d "$target/$pdf" ]; then
if [ -f "$target/$pdf" ]; then
#cp $dir/$file $target
cp "$file" "$target"
fi
done
}
#for file in "${dir_list1[@]}"; do
for dir in "${dir_list1[@]}"; do
search_for_files "$dir"
done
!/usr/bin/env bash
目录列表1=(
/数据/测试/
)
搜索\u以查找\u文件(){
本地目录=$(cd“$1”;pwd)
本地目标=/data/test2/
shopt-s nullglob
对于“$dir”/*xml;do”中的文件
#pdf=$(grep-oPm1)(?尝试将代码粘贴到shellcheck.net[-d“$target/$pdf”]
如果它是一个文件,则应使用[-f”$target/$pdf”]
有些人称之为,有些人称之为,只有少数人称之为。简言之,永远不要用正则表达式解析XML或HTML!您是否尝试过XML解析器,如xmlstarlet
、xmllint
或xsltproc
?