Last active
October 30, 2017 06:28
-
-
Save xtetsuji/6188fbaed7418425b5fd1684be7211b1 to your computer and use it in GitHub Desktop.
progress printing tar command, alpha quality :)
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/bin/bash | |
# xtetsuji 2017/10/30 | |
# pptar - progress printing tar | |
# This is alpha quality :) | |
# https://twitter.com/xtetsuji/status/924861905893593088 | |
SLEEP_SECONDS=1 | |
TAR_FILE_LOG=/tmp/tar_file.$$.log | |
function kill_children { | |
rm -f $TAR_FILE_LOG | |
pkill -P $$ | |
wait | |
} | |
trap kill_children EXIT | |
set -eu | |
opt=$1 | |
dst=$2 | |
src=$3 | |
if [ $opt = ${opt/v/} ] ; then | |
# v を削った $opt が元と同じということは v が無かったということ | |
# v を付けて、実際は $TAR_FILE_LOG へファイルリダイレクトする | |
opt=${opt}v | |
fi | |
tar "$opt" "$dst" "$src" > $TAR_FILE_LOG 2>&1 & | |
tar_pid=$! | |
# ファイルが作られるまで一瞬待つ | |
sleep 1 | |
while [ ! -f $dst ] ; do | |
echo "$dst is not created yet" | |
sleep 1 | |
done | |
# $dst ファイル監視 | |
while true ; do | |
printf "\r%s [%d MB] [%d num]" \ | |
$dst \ | |
$(du -sm $dst | sed -e 's/[^0-9].*//') \ | |
$(wc -l $TAR_FILE_LOG | sed -e 's/^ *//' -e 's/ .*//') | |
# シグナル番号 0 で、その PID のプロセスの存在を確認 | |
if ! kill -0 $tar_pid 2>/dev/null ; then | |
echo "" | |
break | |
fi | |
sleep $SLEEP_SECONDS | |
done | |
# tar のファイル出力は、特に実際のアーカイブファイルへの追加操作と同期しているわけでもないので、逐次で見せなくてもいいかも(誤解もありそうだし) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment