无法移动 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' 的文件将匹配。
我正在尝试编写一个程序来移动到达目录的压缩文件,解压缩它们然后输出内容。
#!/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' 的文件将匹配。