Linux 连续扫描目录并执行操作

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>

我有复杂的要求,其中:

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
#/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