"dialog --gauge"명령에 입력 할 수있는 방식으로 rsync 출력을 필터링 / 리디렉션하는 방법을 찾고 있으므로 파일 동기화 중에 멋진 진행률 표시 줄을 얻을 수 있습니다. 현재 프롬프트에서만 직접 테스트했지만 (bash) 셸 스크립트 에서이 작업을 수행 할 계획입니다.
인터넷을 둘러보고 비트와 조각을 찾았지만 여전히 작동하도록 할 내용이 없습니다.
(면책 조항 : 이것은 완전히 잘못된 접근법 일 수 있으며 리디렉션 / 파이핑 괴물입니다)
내가 현재 정리 한 것 :
rsync -avz --progress -e "ssh" user@server:/home/user/data/ /home/user/data | awk -f /home/user/rsync.awk | sed 's/\([0-9]*\).*/\1/' | dialog --title "My Gauge" --gauge "Hi, this is a gauge widget" 20 70
먼저 --progress 옵션 인 rsync의 출력이 awk로 파이프되고 followng awk 필터를 사용하는 실제 rsync 명령이 있습니다.
{
if (index($0, "to-check=") > 0)
{
split($0, pieces, "to-check=")
split(pieces[2], term, ")");
split(term[1], division, "/");
print (1-(division[1]/division[2]))*100
}
# else
# {
# print "#"$0;
# }
fflush();
}
이것은 rsync 출력을 걸러 내고 다음 형식으로 백분율을 제공합니다.
53.7037
55.5556
57.4074
59.2593
61.1111
62.963
따라서 십진수를 없애기 위해 출력을 sed에 공급합니다.
sed 's/\([0-9]*\).*/\1/'
다음과 같은 결과가 나타납니다.
64
66
68
70
72
74
75
77
이 숫자는 다음과 같이 대화 상자에 파이프됩니다.
dialog --title "My Gauge" --gauge "Hi, this is a gauge widget" 20 70
내가 아는 한 "dialog --gauge"등이 이것을 받아 들여야하지만 갑자기 100 %에 도달 할 때까지 진행률이 0 %로 표시됩니다.
누군가가 올바른 방향으로 나를 가리킬 수 있습니까? 작업 진행률 표시 줄에서 멀리 떨어져 있습니까? 이것을 달성하는 더 좋은 방법이 있습니까?
문안 인사,
크리스 터
편집 : @lynxlynxlynx의 답변을 고려한 후 올바른 명령 줄은 다음과 같습니다.
rsync -avz --progress -e "ssh" user@server:/home/user/data/ /home/user/data \
| awk -f /home/user/rsync.awk \
| sed --unbuffered 's/([0-9]*).*/\1/' \
| dialog --title "My Gauge" --gauge "Hi, this is a gauge widget" 20 70