这个脚本是Linux Live-CD安装程序的一部分。
请帮忙获取目录大小并排除多个文件,同时在rsync运行时使用while循环,根据两个大小的差异输出数字(0-100)。回答以上任何问题都是很大的帮助,谢谢。
编辑:添加完成的rsync进度输出(似乎有足够多的人需要这个) 在Olivier Dulac的帮助下,我做到了这一点。
此命令将在命令行上打印出%的进度,仅适用于大文件传输。
如果rsync覆盖文件,则会使进度显示不准确(显示的进度比实际完成的要少)。
在rsync和du中,exclude.list的读取方式相同。但是,du始终需要完整路径,而rsync则假定exclude文件位于其源内。如果复制根文件系统“/”,则它们可以是同一个文件。否则,您必须为du编写完整的路径(只需将每行文件开头添加/source/即可)。
rsync -aq / /TARGET/ exclude-from=exclude.list &>> errors.log
我希望能够向GUI报告进度。GUI(gtkdialog)对任意数字0-100做出响应(例如,echo 1; echo 2;等等...)。
在这种情况下,rsync -n(干运行)需要太长时间。
我希望运行...
filesystem_size=`(get directory size) / exclude=exclude.list`
rsync -aq / /TARGET/ exclude-from=exclude.list &
while [ rsync is running ]; do
(check size) /TARGET/
compare to $filesystem_size
echo $number (based on the difference of sizes)
done
请帮忙获取目录大小并排除多个文件,同时在rsync运行时使用while循环,根据两个大小的差异输出数字(0-100)。回答以上任何问题都是很大的帮助,谢谢。
编辑:添加完成的rsync进度输出(似乎有足够多的人需要这个) 在Olivier Dulac的帮助下,我做到了这一点。
size_source=`du -bs --exclude-from=/path/to/exclude.list /source/ | sed "s/[^0-9]*//g"`
size_target=`du -bs /target/ | sed "s/[^0-9]*//g"`
rsync -aq /source/ /target/ --exclude-from=/path/to/exclude.list &
while [[ `jobs | grep "rsync"` ]]; do
size_target_new=`du -bs /TARGET/ | sed "s/[^0-9]*//g"`
size_progress=`expr $size_target_new - $size_target`
expr 100 \* $size_progress / $size_source
sleep 10
done
此命令将在命令行上打印出%的进度,仅适用于大文件传输。
如果rsync覆盖文件,则会使进度显示不准确(显示的进度比实际完成的要少)。
在rsync和du中,exclude.list的读取方式相同。但是,du始终需要完整路径,而rsync则假定exclude文件位于其源内。如果复制根文件系统“/”,则它们可以是同一个文件。否则,您必须为du编写完整的路径(只需将每行文件开头添加/source/即可)。
--progress
吗? - Olivier Dulac