Linux 将.gz文件解压缩到/tmp位置,并在任务完成后删除未映射的.gz文件

Linux 将.gz文件解压缩到/tmp位置,并在任务完成后删除未映射的.gz文件,linux,bash,shell,Linux,Bash,Shell,我的脚本如下,用于逐行读取文件 file= "/c/User/XXX/Desktop/XYZ.log" while IFS= read -r line do if echo $line | grep -Eq 'something' ; then [ do these tasks ] # define the log directory log_dir=/c/Users/xxxxx/Desktop/Logs/"$DIR"/read_log #

我的脚本如下,用于逐行读取文件

file= "/c/User/XXX/Desktop/XYZ.log" 
while IFS= read -r line
do
    if echo $line | grep  -Eq 'something' ; then

      [ do these tasks ]


    # define the log directory
    log_dir=/c/Users/xxxxx/Desktop/Logs/"$DIR"/read_log

    # define the log file for this month
    log_file="$log_dir/rlog-$(date +%Y-%m)"

    # Create the log directory.
    if [ ! -d "$log_dir" ]; then
           mkdir -p "$log_dir" ||
                   die "failed to create log directory $log_dir"
    fi

    echo "variable" >> "$log_file"

    fi  
done <"$file"
file=“/c/User/XXX/Desktop/XYZ.log”
而IFS=读取-r行
做
如果echo$line | grep-Eq‘某物’;然后
[完成这些任务]
#定义日志目录
log\u dir=/c/Users/xxxxx/Desktop/Logs/“$dir”/read\u log
#定义本月的日志文件
log_file=“$log_dir/rlog-$(日期+%Y-%m)”
#创建日志目录。
如果[!-d“$log_dir”];然后
mkdir-p“$log_dir”||
die“未能创建日志目录$log\U dir”
fi
echo“变量”>>“$log\u文件”
fi

完成您可以使用
读取
将tar文件提取到
中,并根据需要逐行处理:

file=/c/User/XXX/Desktop/XYZ.gz
tar-xzf-$file |而IFS=read-r行
做
...
完成

您可能会侥幸逃脱:


zcat“$file”|而IFS=读取行
做
...
完成


应该通过管道传输,这样就不需要临时文件。

关于.gz文件的内容,问题还不清楚。基于您提到的路径这一事实,我假设您实际上有一个
.tar.gz
文件(即一个.gz文件包含一个.tar文件,该文件又包含一个单独的文件,类似于x/y/z/thefile.log)

在这种情况下,您可能不需要解压缩到临时文件,只需执行以下操作(-O告诉
tar
将文件发送到stdout,而不是保存到磁盘):

tar-O-zxf myfile.tar.gz |而read-r行;执行…

如果您仍想将其保存到临时文件中(例如,因为您不想在子进程中运行“while…”):

tmpfile=/tmp/您选择的文件路径
tar-O-zxf myfile.tar.gz>“$tmpfile”
读;做
完成您将要使用

或者,如果要在日志文件中为每个匹配的行添加内容,则:


在运行
gunzip
时,如果没有
-k
-keep
标志,解压时原始的
.gz
文件将被删除。因此,您的一个需求是通过
gunzip
默认行为来解决的。至于将一个Gzip文件压缩到特定目录,您可以使用
-c
标志并重定向
gunzip-c myfile.gz>/some/file
,这看起来是错误的:
file=“/c/User/XXX/Desktop/XYZ.log”
——分配中的
=
周围不能有空格,我怀疑文件名中的前导空格不是您想要的(您在当前目录中没有名为“”的文件夹,对吗?@glenn,我已经编辑了我的帖子。这是打字错误。很抱歉,在分配文件中,
=
周围不能有空格,例如=shell.log.1.gz[在此归档文件中有一个名为shell.log.1的文件,我收到了tar错误…tar:这看起来不像tar归档文件tar:跳到下一个标题tar:由于以前的错误而以失败状态退出如果该文件不是.tar.gz文件,您应该直接使用'gunzip Got this error'解压它tar:这看起来不像tar存档tar:跳到下一个标题tar:由于以前的错误而以失败状态退出如果您只是对文件进行zcat,您是否得到了预期的明文?(例如
zcat“$file”| less
)嗨,Gelnn,我在执行文件后收到无效的编码和加密错误。我可以看到日志文件夹,但它有编码和加密问题什么是“编码和加密错误”?你知道原始日志文件的编码吗?你自己的编码是什么(
env|grep'LANG\\ LC'
)?
tmpfile=/tmp/your-chosen-file-path
tar -O -zxf myfile.tar.gz >"$tmpfile"
while read ... ; do
done <"$tmpfile"
rm "$tmpfile
log_dir=/c/Users/xxxxx/Desktop/Logs/"$DIR"/read_log
mkdir -p "$log_dir"
log_file="$log_dir/rlog-$(date +%Y-%m)"
file="/c/User/XXX/Desktop/XYZ.log.gz" 

if zgrep -Eq 'something' "$file"; then 
    echo "variable" >> "$log_file"
fi
zgrep -E 'something' "$file" | while IFS= read -r matched_line; do
    echo "variable"
done  >> "$log_file"