사용자 정의 이름과 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

관련 정보