カスタム名と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受け入れます。$FILEsplit

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

関連情報