gtkrsync(1) GUI front-end for rsync


gtkrsync [ args for rsync ... ]



gtkrsync is a graphical interface for displaying the progress of an rsync(1) session. It displays a running status display from parsing the output of rsync --progress -v (with --no-inc-recursive with rsync v3.0 or above). This status display includes a per-file and overall status bar, overall estimated time to completion, and an expandable button that shows all rsync status output.

Unlike other GUI rsync frontends such as grsync, gtkrsync does not have any GUI tools for configuring or invoking rsync. gtkrsync is designed to be invoked from the command line or shell scripts, which already specify all the needed rsync options. It is thus ideal for scripted rsync runs that need a GUI, or for command-line users that would like a GUI to monitor their rsync progress.

gtkrsync is a drop-in replacement for rsync. It fires up the GUI and invokes rsync, passing all args to it. When invoked this way, gtkrsync is able to detect if rsync exits in error and alerts the user. gtkrsync can also monitor both stdout and stderr from rsync, and displays both. The cancel button in gtkrsync also will kill off the rsync process. You must make sure to pass --progress -v on the gtkrsync command line in order to get enough information out of rsync to build a proper GUI.

If ysing rsync version 3.0 or above, you must also add --no-inc-recursive to your command line. These newer versions of rsync use incremental tree scanning by default. As a result, they do not emit information up front about the expected number of files to transfer, and thus gtkrsync would lack enough information to display its progress bars.

Besides gtkrsync, the other binary is gtkrsyncp. This program accepts the output of rsync --progress -v on standard input and displays it in a GUI. It cannot detect whether rsync exited in error and cannot kill rsync when Cancel is pressed. However, this program may be useful in some cases when direct control of rsync is handled elsewhere.


All options passed to gtkrsync are sent directly to rsync(1). gtkrsyncp takes no options.


gtkrsync and gtkrsyncp both return 0 on success or 20 if the user clicked Cancel or closed the window before the rsync was complete. 20 is also the code that rsync uses to indicate a transfer interrupted by the user.

In all other cases, gtkrsync returns the result code that rsync returned. gtkrsyncp returns 0.


gtkrsync will look for an RSYNC environment variable. If set, it is taken to be the name of the rsync binary. If not given, rsync is used. gtkrsyncp does not use this variable.

This application uses no other environment variables directly, but other programs or standard libraries may do so. DISPLAY, for instance, must be set for the X libraries to work.

Users using rsync over ssh may find the SSH_ASKPASS variable useful. This is interpreted directly by ssh and can specify a GUI tool to use to prompt the user for a password when needed.


gtkrsync, all associated scripts and programs, this manual, and all build scripts are Copyright (C) 2007-2010 John Goerzen.

This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version.

This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.

You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA


gtkrsync, its modules, documentation, executables, and all included files, except where noted, was written by John Goerzen <[email protected]> and copyright is held as stated in the COPYRIGHT section.

gtkrsync may be downloaded from the Debian packaging system or at

gtkrsync may also be downloaded using git by running git clone git://