방금 MacOS에 대한 의견을 보았습니다. @ akira (및 pv)의 솔루션이 훨씬 깔끔하다고 생각하지만 MacOS 상자에서 tar를 사용하여 직감과 빠른 해결 방법을 쫓아 SIGINFO 신호를 보내는 것으로 생각했습니다. 재미있게도, 그것은 작동했습니다 :) 만약 당신이 BSD와 같은 시스템이라면, 이것이 작동 해야 하지만 Linux 상자에서는 SIGUSR1을 보내거나 tar
같은 방식으로 작동하지 않을 수 있습니다.
단점은 현재 파일에서 얼마나 멀리 있는지 보여주는 출력 (표준 출력) 만 제공한다는 것입니다. 데이터 스트림의 크기가 얼마나 큰지 알지 못하기 때문입니다.
따라서 다른 방법은 타르를 실행하고 얼마나 멀리 도달했는지 알고 싶을 때마다 SIGINFO를 주기적으로 보내는 것입니다. 이것을하는 방법?
임시 수동 접근
임시로 상태를 확인 control-T
하려면 SIGINFO 신호를 전송하는 관련 창에서 (Brian Swift가 언급 한대로) 누르십시오. 그것에 대한 한 가지 문제는 그것이 내가 믿는 전체 체인에 그것을 보낼 것이므로, 당신이하고 있다면 :
% tar cvf - folder-with-big-files | bzip2 -c > big-files.tar.bz2
또한 bzip2가 tar와 함께 상태를보고합니다.
a folder-with-big-files/big-file.imgload 0.79 cmd: bzip2 13325 running
14 0.27u 1.02s
adding folder-with-big-files/big-file.imgload (17760256 / 32311520)
tar
실행중인 것이 붙어 있는지 또는 느리게 확인하려는 경우에 잘 작동합니다 . 이 경우 포맷 문제에 대해 너무 걱정할 필요가 없습니다. 빠른 검사일뿐입니다.
자동화 된 접근 방식
시간이 걸리지 만 진행률 표시기와 같은 것을 원한다면 대안은 tar 프로세스를 시작하고 다른 터미널에서 PID를 해결 한 다음 반복적으로 신호를 보내는 스크립트에 던져 넣는 것입니다 . 예를 들어, 다음과 같은 스크립틀릿이있는 경우 (와 같이 말합니다 script.sh PID-to-signal interval-to-signal-at
) :
#!/bin/sh
PID=$1
INTERVAL=$2
SIGNAL=29 # excuse the voodoo, bash gets the translation of SIGINFO,
# sh won't..
kill -0 $PID # invoke a quick check to see if the PID is present AND that
# you can access it..
echo "this process is $$, sending signal $SIGNAL to $PID every $INTERVAL s"
while [ $? -eq 0 ]; do
sleep $INTERVAL;
kill -$SIGNAL $PID; # The kill signalling must be the last statement
# or else the $? conditional test won't work
done
echo "PID $PID no longer accessible, tar finished?"
이 방법으로 호출하면 타겟팅하기 때문에 다음 tar
과 같은 결과를 얻을 수 있습니다
a folder-with-big-files/tinyfile.1
a folder-with-big-files/tinyfile.2
a folder-with-big-files/tinyfile.3
a folder-with-big-files/bigfile.1
adding folder-with-big-files/bigfile.1 (124612 / 94377241)
adding folder-with-big-files/bigfile.1 (723612 / 94377241)
...
내가 인정하는 것은 꽤 예쁘다.
마지막으로-내 스크립팅은 다소 녹슨 것입니다. 누군가가 들어가서 코드를 정리 / 수정 / 개선하고 싶다면 평생 가십시오 :)