gpt4 book ai didi

linux - 从复杂的 bash 命令创建脚本

转载 作者:太空宇宙 更新时间:2023-11-04 09:08:50 24 4
gpt4 key购买 nike

我需要在包含大量压缩文件的文件夹中运行以下命令。

perl myscript.pl -d <path> -f <protocol> "<startdate time>"
"<enddate time>" -o "0:00 23:59" -v -g -b <outputfilename>

我的问题是该命令不将 gzip 文件作为输入。因此,我需要即时解压缩所有这些 gzip 文件,并对这些解压缩文件运行此命令。这些 gzip 文件位于另一个文件夹中,不允许我解压缩它们。我想要一个 shell 脚本,它将采用远程 gzip 文件的路径并将其存储在路径下(这也将成为脚本的参数)。进行解压缩,然后运行上述命令。

注意:“协议(protocol)”、“开始日期时间”、“结束日期时间”、“输出文件名”现在不必作为参数,我只是将它们直接放在脚本中,这样它就不那么复杂了。

最佳答案

你可以这样做:

for fname in path/to/*.gz; do gunzip -c "$fname" | perl myscript.pl ; done

展开:

for fname in path/to/*.gz; do
gunzip -c "$fname" | perl myscript.pl
done

并让它接受带空格的文件名:

old_IFS=$IFS
IFS=$'\n'
for fname in path/to/*.gz; do
gunzip -c "$fname" | perl myscript.pl -f <protocol> "<startdate time>" \
"<enddate time>" -o "0:00 23:59" -v -g -b <outputfilename>
done
IFS=$old_IFS

这样,您就可以让脚本读取包含文件内容的标准输入,而无需使用临时文件。


编辑:这是一个包装脚本,可以解决问题中最初建议的问题:

`myscriptwrapper`:
#!/bin/bash
gzip_path="$1"
temp_path="$2"
#loop thru files from gzip_pah\th
for fname in $gzip_path/*.gz; do
basename=`basename $fname`
#fill them in the target dir
gunzip "$fname" -c > "$temp_path/$basename"
done

#finally, call our script
perl myscript.pl -d "$temp_path" -f <protocol> "<startdate time>" "<enddate time>" -o "0:00 23:59" -v -g -b <outputfilename>

编辑 2:使用 tar.gz 文件:

`myscriptwrapper`:
#!/bin/bash
gzip_path="$1"
temp_path="$2"
cd "$temp_path"
#loop thru files from gzip_pah\th
for fname in $gzip_path/*.tar.gz; do
tar -xzf $fname
done

#finally, call our script
perl myscript.pl -d "$temp_path" -f <protocol> "<startdate time>" "<enddate time>" -o "0:00 23:59" -v -g -b <outputfilename>

关于linux - 从复杂的 bash 命令创建脚本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3658194/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com