无法移动 gzip 文件

Failure to move gzipped file

我正在尝试编写一个程序来移动到达目录的压缩文件,解压缩它们然后输出内容。

 #!/bin/bash
shopt -s extglob
echo "Press [CTRL+C] to stop.."
#begin loop
while :
do
    #search folder test_source for files and append names to array
    queue+=($(ls /home/ec2-user/glutton/test_source | egrep 'test[0-9]{1}.gz'))
    for i in $queue; do
        #move file in test_source to temp folder
        mv /home/ec2-user/glutton/test_source/${queue[i]} /home/ec2-user/glutton/temp
        #unzip file
        gunzip /home/ec2-user/glutton/temp/${queue[i]}
        #add new file name to variable unzipped
        unzipped=($(ls /home/ec2-user/glutton/temp | egrep 'test[0-9]{1}'))
        cat temp/$unzipped
        #Test for successful run
        exit_status=$?
        if [ $exit_status -eq 1 ]; then
            #If fail move file to bank and output
            mv /home/ec2-user/glutton/temp/$unzipped /home/ec2-user/glutton/logs/bank
            echo "Error! $unzipped moved to /home/ec2-user/glutton/logs/bank"
            #write to error.log
            echo "moved ${queue[i]} to bank due to error" >> /home/ec2-user/glutton/logs/error.log
        else 
            #If success delete file
            rm /home/ec2-user/glutton/temp/$unzipped
        fi
        #wipe variable
        unset unzipped
        i=$i+1
    done
#wipe array
unset queue
i=0
#go to top of loop
done

在我添加解压缩功能之前这一直运行良好,现在我的程序在尝试移动 .gz 文件时输出此错误:

   ./glutton.sh: line 11: test0.gz: syntax error: invalid arithmetic operator (error token is ".gz")

当我在命令行中 运行 我的脚本的第一部分时,它似乎工作得很好,但当我 运行 它自己时,我很困惑。

您的主要问题是,当您像现在这样迭代一个数组时,您得到的是数组的第一项,而不是索引。所以在你的例子中,$i 不是一个数字,它是文件名(即 test1.gz),它只会看到第一个文件。我见过的迭代数组中项目的最干净的方法是 for i in "${arrayName[@]}".

此外,在您的正则表达式中使用“{1}”是多余的,如果您不指定修饰符,字符 class 将只匹配 1 个字符。

根据你的 'temp' 文件夹的内容应该没关系,但我也会更具体地说明你的 egreps,如果你添加 -x 那么它必须匹配整个细绳。目前,名为 'not_a_test1' 的文件将匹配。