使用自定义名称和 gzip 从流输出中拆分文件

使用自定义名称和 gzip 从流输出中拆分文件

我有一个带有 while 循环的脚本,可以打印文本。我想将其保存到具有自定义名称的文件中。

脚本:

#!/bin/bash
while true
do
    echo "Press [CTRL+C] to stop.."
done

我可以运行拆分:

./loopscript.sh  | split -dl 10000 --additional-suffix=.txt

输出:

x001.txt
x002.txt
x003.txt
x004.txt
x005.txt

但我想像下面这样保存它:

myoutput.001.gz
myoutput.002.gz
myoutput.003.gz
myoutput.004.gz
myoutput.005.gz

答案1

对于自定义名称(前缀),您可以将其添加在末尾作为参数。要过滤所有输出文件,gzip您可以使用该--filter=COMMAND选项。-a3如果您需要将后缀长度定义为 3 个字符(001等),也是可选的002。另请注意-输出前缀参数之前的(读取标准输入)。

./loopscript.sh | split -a3 -dl 10000 --filter='gzip > $FILE.gz' - myoutput. 

将生成 gzip 压缩文件(如果解压缩,则为 10K 行),名称如下:

myoutput.000.gz
myoutput.001.gz
myoutput.002.gz

man split语法上看,(可选)输出前缀到末尾:

SYNOPSIS
       split [OPTION]... [FILE [PREFIX]]

--filter接受命令$FILE中的文件名split

       --filter=COMMAND
              write to shell COMMAND; file name is $FILE

相关内容