运行 do 循环

运行 do 循环

我正在尝试构建一个循环来检查文件夹中的文件,然后如果文件夹中存在文件则运行循环,并继续运行循环直到没有更多文件,但我遇到了标记错误,“意外标记'do'附近的语法错误。这是我尝试运行的脚本。

files=/satellite/MSGVIS6/* 
if [ "${#files[@]}" -gt 0 ]; then
do
    mcenv << 'EOF'
    imgcopy.k MSGVI6D MSGVI6I BAND=1 SIZE=SAME
    imgremap.k MSGVI6I MSGVI6I.2 SIZE=ALL PRO=MERC RES=3.00
    imgcha.k MSGVI6I.2 STYPE=GVAR
    imgdel.k MSGVI6I.1
    exit
    EOF
    find /satellite/awips/ -type f -name 'AREA6022*' -exec mv '{}' /awips2/edex/data/manual/ \;
    rm -rf "$files"
    done

else
echo ''
echo "No files downloaded. New area files will not be created."
fi 

exit 0

您认为我可能写错了什么吗?

答案1

假设 bash 在一个简单的变量赋值中,不执行通配符:

$ a=*
$ echo "$a"
*

要获取数组,需要使用括号:

a=(*)

例如,在/usr

$ a=(*)
$ echo "$a" "${a[@]}"
bin bin include lib lib32 lib64 local sbin share src

因此,你的第一行实际上应该是:

files=(/satellite/MSGVIS6/*) 

要扩展到数组中的所有元素a,请使用"${a[@]}"

rm -rf "${files[@]}"

其他说明:

  • 您可以使用以下方法mv -t来提高find效率{} +

    find /satellite/awips/ -type f -name 'AREA6022*' -exec mv -t /awips2/edex/data/manual/ {} +
    
  • 只需使用echo而不是echo ''

    echo
    echo "No files downloaded. New area files will not be created."
    
  • exit 0是毫无意义的。

相关内容