2016-08-22 13 views
0

私はバックアップスクリプトを作成しており、tarの正しい進行状況を見たいと思っています。スクリプトの 本体:シェルスクリプトでpvサイズを正しく設定する方法

backup_file="root-backup-$(date +%Y.%m.%d-%H.%M.%S).tar" 
sudo -v 
sudo mount /dev/vg/root /mnt 
time sudo sh -c "cd /mnt; tar --xattrs -cf - . | pv -s $(du -sb | grep -o '[0-9]*') > /backup/${backup_file}" 

しかし、高速のプログレスバー100000%まで増加し、その後数を満たすPVショー。

Upd1。ミスプリントがスクリプトで修正されました。実際には動作しますが、プログレスバーは正しくありません。

答えて

0

問題が見つかりました:$(du -sb | grep -o '[0-9]*')は新しいサブシェルの下で呼び出していません。コマンド置換として呼び出しています。

したがって、実行前にsudo sh -c bashは現在のディレクトリ(私の場合はそれより小さい)に$(du -sb | grep -o '[0-9]*')を呼び出して、結果をstringに置き換えます。

結果として、pv -sのサイズが正しくなく、正しくない進捗状況が表示されます。

私は単一引用符で置換周囲の看板 $防ぐ に決めました

time sudo sh -c "cd /mnt; tar --xattrs -cf - . | pv -s "'$'"(du -sb | grep -o '[0-9]*') > /backup/${backup_file}"

関連する問題