如何使用shell脚本查看目录并更改文件?

时间:2015-08-28 03:51:11

标签: arrays bash loops ftp directory

我制作了一个脚本,可以完成90%我想要做的事情。它进入一个目录(根据输入的日期)并更改我提供给数组的文件。但是,我想更改此脚本还包含一个日期数组(这是目录名称)。它将循环遍历目录,当它从文件名数组中找到其中一个文件时,它会对其进行更正并继续运行,直到所有文件都已更正为止。我已经尝试了几个不同的版本,但我不确定如何实现第二个数组以在文件更正后继续浏览目录。

目前,我的脚本如下所示:

debug=false

## *****Put file name in quotes******
declare -a arr=("UF19905217" "UG19905218" )

##Put date in DDMMYYYY format for the date the message was original processed.
DATE="25082015"

## now loop through the above array
for i in "${arr[@]}"
do
    #if "$debug; then
        echo "Fix file named: Inbound_$i.msg"
        MSG="Inbound_$i.msg"
    #fi

    if [ ! -d "$MSG" ]; then
    # Enter what you would like changed here.  You can copy and paste this command for multiple changes

        #DATATYPE
        printf "%s\n" ',s/<DataType>EDI<\/DataType>/<DataType>830<\/DataType>/g' wq | ed -s  /data1/Inbound/$DATE/$MSG        

        echo "Complete"
    else
            echo "Message not found or errored!"
    fi

done

感谢您提供的任何帮助。谢谢。

1 个答案:

答案 0 :(得分:1)

我相信你只想将循环中的循环包含在循环遍历所需目录的循环中:

debug=false

## *****Put file name in quotes******
declare -a arr=("UF19905217" "UG19905218" )

##Put date in DDMMYYYY format for the date the message was original processed.
dates=( 25082015 26082015 )

for DATE in "${dates[@]}"; do    
  for i in "${arr[@]}"; do
    MSG="Inbound_$i.msg"
    if $debug; then
      echo "Fix file named: $MSG"
    fi

    if [ ! -d "$MSG" ]; then
      printf "%s\n" ',s/<DataType>EDI<\/DataType>/<DataType>830<\/DataType>/g' wq | ed -s  /data1/Inbound/$DATE/$MSG
      echo "Complete"
    else
      echo "Message not found or errored!"
    fi
  done
done