진행률 표시줄이 있는 Tar 백업

진행률 표시줄이 있는 Tar 백업

tar 백업 명령에 진행 표시줄을 추가하고 싶습니다. 나는술집쉘 스크립트가 이 작업을 수행할 수 있어야 하지만 올바른 명령을 알아낼 수 없습니다.

sudo tar pzcf - /media/data | bar > /media/backups/backup.tar.gz

위 명령을 사용하면 일부 정보를 표시할 수 있었지만 아직 진행률 표시줄은 표시되지 않았습니다.

답변1

죄송하지만 이는 불가능합니다. 파일 bar자체에서:

Synopsis:
  'bar' works just like 'cat', but shows a progress bar in ASCII art on stderr.
  The script's main function is meant to be usable in any Bourne shell to be
  suitable for install scripts without the need for any additional tool.

문제는 진행 표시줄을 표시하려면 bar먼저 파일 크기를 알아야 한다는 것입니다.

을 위한적출아카이브라면 문제 없습니다. 이 크고 지금까지 처리된 경우 backup.tar우리 100 MiB50 MiB에 있습니다 50 %.

그러나창조아카이브는 bar에서 읽으며 stdin모든 실제적인 목적을 위해 무한합니다. 다음과 같이선적 서류 비치말한다:

무한 스트림은 좋지 않습니다. 막대는 0%와 100%에서만 표시됩니다. [...]


내가 생각할 수 있는 백업 목적으로 진행률 표시줄을 표시하는 유일한 방법(사용자 정의 버전을 컴파일하는 것 외에)막대가 있는 타르) 이다:

  1. 파일의 누적 크기를 계산합니다 /media/data.

  2. backup.tar파일을 /media/data하나씩 생성 하고 추가합니다.

  3. 각 파일 다음에 현재 백분율을 계산하여 표시합니다.

  4. gzip backup.tar(당신~할 수 있다이것을 위해 사용하십시오 tar).

예:

TOTAL=$(du -b /media/data | grep -oP "^\d+")
CURRENT=0
echo "Archiving:"
IFS="
"
for FILE in $(find /media/data -type f); do 
    tar rf backup.tar $FILE
    CURRENT=$(($CURRENT+$(du -b $FILE | grep -oP "^\d+")))
    echo -en "\r"$((100*($CURRENT-1)/$TOTAL+1))"%"
done
echo
echo "Compressing:"
bar backup.tar | gzip > backup.tar.gz
rm backup.tar

주의:

  • 이로 인해 백업 진행 속도가 느려질 수 있습니다.
  • 파일 이름에는 개행 문자가 포함될 수 없습니다.

관련 정보