我目前有一个bash脚本,可以帮助我rsync一个文件。
# Copy the file over
echo "* Downloading: ${TARGET_FILE_NAME}"
rsync -vh --progress --stats "$TARGET_FILE_PATH" "$USER_PATH" | exit 1)
echo "* Downloading Complete}"
但是当运行脚本时,我只看到
* Downloading SOME_FILE
* Downloading Complete
我很想看到rsync的进展。我试过rsync .... 2>&1
,但我似乎不能得到正确的语法。
我也试过:rsync -vh --progress --stats "$TARGET_FILE_PATH" "$USER_PATH" --log-file=/dev/stdout
但这仍然没有打印出任何内容。
我也试过:
rsync -vh --progress --stats "$TARGET_FILE_PATH" "$USER_PATH" | while IFS= read -r line; do
echo " $line"
done
但这似乎只是在rsync完成后打印出来。
1条答案
按热度按时间m3eecexj1#
要在传输过程中捕获
rsync
的输出并立即打印它,可以使用以下方法。在此脚本中,我们在后台使用&启动
rsync
命令,并将其进程ID(PID)存储在RSYNC_PID
变量中。然后,我们使用wait命令等待rsync
进程完成。通过在后台运行
rsync
进程,脚本可以继续执行并显示类似“* 正在下载:...”和“* Downloading Complete”,而rsync
正在运行。rsync
的进度和输出将照常显示,因为它在同一个终端中运行。rsync
进程完成后,我们在EXIT_STATUS
变量中捕获其退出状态,并相应地显示下载完成或下载失败。