为了监视cp进度,我找到了下面的bash脚本。
#!/bin/sh
cp_p()
{
strace -q -ewrite cp -- "${1}" "${2}" 2>&1 \
| awk '{
count += $NF
if (count % 10 == 0) {
percent = count / total_size * 100
printf "%3d%% [", percent
for (i=0;i<=percent;i++)
printf "="
printf ">"
for (i=percent;i<100;i++)
printf " "
printf "]\r"
}
}
END { print "" }' total_size=$(stat -c '%s' "${1}") count=0
}我不明白strace命令的"-ewrite“选项。我发现的最接近的东西是斯特拉斯的手册
-e write=set对写入指定集中列出的文件描述符的所有数据执行完整的十六进制和ASCII转储。例如,要查看文件描述符3和5上的所有输出活动,请使用-e write=3,5。注意,这与由选项-e trace=write控制的写(2)系统调用的正常跟踪无关。
但是,我不明白-ewrite选项是干什么的。
发布于 2010-08-23 13:55:56
-ewrite意味着只跟踪“写”系统调用。
-e expr是一个限定表达式,它修改要跟踪的事件或如何跟踪它们。表达式的格式是:
qualifier=value1,value2.其中限定符是跟踪、缩写、冗长、原始、信号、读或写,值是与质量有关的符号或数字。默认的查询符是跟踪。使用感叹号否定一组值。例如,-eopen意味着点燃-e trace=open,这反过来意味着只跟踪开放的系统调用。相反,-etrace=!open意味着跟踪除open之外的所有系统调用。另外,特殊的价值都和没有有明显的意义。请注意,有些shell使用感叹号表示历史扩展,甚至在引用的参数中也是如此。如果是这样,则必须用反斜杠.转义感叹号。
https://stackoverflow.com/questions/3548192
复制相似问题