Shell脚本:循环gunzip和grep语句

Shell脚本:循环gunzip和grep语句,shell,for-loop,gunzip,Shell,For Loop,Gunzip,我正在尝试创建一个shell脚本: 将文件从我的日志目录复制到单独的目录以进行分析 Gunzips文件并查找文本模式 将该模式输出到文件以供进一步分析 删除所述文件 我正试着分阶段做这件事。到目前为止,我还没能离开地面。叹息 我从这里提取了这个示例,并开始修改它: #!/bin/bash FILES= `ls /opt/dir1/scripts/access_*.gz` for i in $FILES do cp $i /tmp/apache gunzip $i

我正在尝试创建一个shell脚本:

  • 将文件从我的日志目录复制到单独的目录以进行分析

  • Gunzips文件并查找文本模式

  • 将该模式输出到文件以供进一步分析

  • 删除所述文件

我正试着分阶段做这件事。到目前为止,我还没能离开地面。叹息

我从这里提取了这个示例,并开始修改它:

#!/bin/bash


FILES= `ls /opt/dir1/scripts/access_*.gz`



for i in $FILES
  do
    cp $i /tmp/apache
    gunzip $i | grep -i 'Mozilla' >> output.txt
  done
每次我这样做时,都会收到一条拒绝许可的消息,如下所示:

/test1.sh:第7行:/opt/dir1/scripts/access\u log.1.gz:权限被拒绝

即使我以root用户身份运行这个脚本,并且如果我手动执行这些命令,我也没有问题。有什么想法吗


谢谢

Root似乎没有
/opt/dir1/scripts/
中的写入权限。你所做的不是你打算做的;)

首先,您应该创建文件夹以确保它存在:
mkdir-p/tmp/apache

使用
cp$i/tmp/apache
可以将文件复制到该目录中

gunzip$i
不会提取刚才复制的文件,而是从上面一行提取原始文件。我建议使用一种更简单的方法来实现这一点。zgrep类似于grep,但也可以处理gzip文件。首先尝试以下方法:

#!/bin/bash
# create the folder (-p supreses warnings if the folder exists)
mkdir -p /tmp/apache
# create the output file (empty it, if it exists)
echo "" > /tmp/apache/output.txt
zgrep -i 'Mozilla' /opt/dir1/scripts/access_*.gz >> /tmp/apache/output.txt

哇,我不知道zgrep的事。这使得整个过程变得更加容易,因为我甚至不需要使用脚本。谢谢