2013年11月11日 星期一

[Linux][script] cp 的進度表

很早以前看過類似這邊(ubuntu 論壇)的問題,希望 cp 的時候可以有個進度條。同樣的需求在 google 裡面可以找到其它的解決方式,例如用 rsync 又可以有進度又可以保留權限之類的提案。

但是 rsync 的問題是,不如 cp 的直覺/簡單,而且權限那些東西,只要下 -a 就解決了,不是?

所以如果聚焦在進度這件事情上面的話,其實可以使用 strace 來處理,很簡單就有下面這樣的效果:
做法是在 $HOME/.bashrc 底下加入一個 function:
cp_p() {
strace -q -ewrite cp -- "${1}" "${2}" 2>&1 \
| awk '{
count += $NF
if (count % 10 == 0) {
percent = count / total_size * 100
printf "\b\b\b\b\b%03d %%", percent
}
}
END { print "\nDone\n" }' total_size=$(stat -c '%s' "${1}") count=0
}

需要使用時就用 cp_p 就可以

沒有留言:

張貼留言