여러 하위 디렉터리에서 압축 풀기 및 gzip

여러 하위 디렉터리에서 압축 풀기 및 gzip

여러 하위 디렉터리로 구성된 디렉터리가 있습니다. 각 하위 디렉터리에는 파일이 있으며 압축 tar.gz을 풀면 두 개의 파일이 제공됩니다 R1.fastq. R2.fastqtar 파일의 압축을 풀고 파이핑한 후 즉시 압축하고 R1.fastqR2.fastq하위 디렉터리의 출력을 다른 SINGLE 디렉터리에 저장하고 싶습니다.

 sourcedir=/sdir
 destdir=/ddir

 for f in $sourcedir/*; do
    fbase=${f##*/}   
    echo "Inside $fbase"
 tar -xvf $f/*.gz |gzip -n9 $f/*.fastq > $destdir/
done

위의 코드를 작성했지만 명령이 실행될 때까지 계속 유지됩니다 echo.

답변1

$f/*.fastq이 줄이 호출되면 아무 것도 일치하지 않습니다. 그러나 주요 문제는 tar표준 출력으로 추출하지 않고 파일을 생성한다는 것입니다(파이프의 다른 쪽 끝에 있는 "수신"에게 한 파일이 끝나고 다른 파일이 시작된다는 것을 알리는 방법이 필요하지만 적어도 그렇지 않습니다). 아니다) tar.

따라서 사용시 반드시 tar파일을 먼저 생성하신 targzip생성된 파일을 생성하셔야 합니다.

파일이 메모리에 맞으면 Python tarfilegzip모듈을 사용하여 빠른 스크립트를 작성할 수 있으며 압축되지 않은 코드가 디스크에 닿지 않도록 할 수 있습니다. IIRC 개별 파일은 완전히 추출되므로 이 작업이 작동하려면 파일이 메모리에 맞아야 합니다.

답변2

일반적인 접근 방식은 아카이브에서 파일 이름을 읽은 다음(항상 동일하지 않은 경우) tar한 번에 하나의 파일만 추출하는 것입니다. GNU에는 파일 쓰기를 방지하는 tar옵션이 있습니다 . --to-stdout그렇지 않으면 파일 이름당 FIFO가 필요합니다.

> tar -tf subdir.tar.gz
R1.fastq
R1.fastq

tar -xf subdir.tar.gz --to-stdout R1.fastq | gzip -n9 >/path/to/R1.fastq.gz
tar -xf subdir.tar.gz --to-stdout R2.fastq | gzip -n9 >/path/to/R2.fastq.gz

관련 정보