MediaWiki API result

This is the HTML representation of the JSON format. HTML is good for debugging, but is unsuitable for application use.

Specify the format parameter to change the output format. To see the non-HTML representation of the JSON format, set format=json.

See the complete documentation, or the API help for more information.

{
    "batchcomplete": "",
    "continue": {
        "gapcontinue": "SASL",
        "continue": "gapcontinue||"
    },
    "query": {
        "pages": {
            "1889": {
                "pageid": 1889,
                "ns": 0,
                "title": "Roundcube",
                "revisions": [
                    {
                        "contentformat": "text/x-wiki",
                        "contentmodel": "wikitext",
                        "*": "== Debian packages ==\n\nThe main package is\n roundcube\n\nA DBMS-specific package is also required. I prefer to use PostgreSQL, so in my case the package is this:\n roundcube-pgsql\n\nAn additional package with useful plugins should also be installed:\n roundcube-plugins\n\nFinally, in Debian testing there is another package with plugins that is not yet available in Debian jessie. This one I manually downloaded and installed because it contains the useful plugins <code>listcommands</code> and <code>markasjunk2</code>:\n roundcube-plugins-extra\n\n\n== References ==\n\n* http://trac.roundcube.net/wiki/Howto_Config (some of the most important, but not all, configuration options are explained here)\n* http://trac.roundcube.net/wiki/Howto_Install (the Debian package already does most of the stuff explained in this document, so you can skip that)\n* <code>/usr/share/doc/roundcube-plugins/README.Debian</code> (for help on how to make plugins work)\n\n\n== Database configuration ==\n\nWhen the Debian package installs, it delegates database configuration to <code>dbconfig-common</code>. The questions to answer are these:\n* Configure database for roundcube with dbconfig-common = yes\n* Database type = pgsql\n* PostgreSQL application password = secret (or leave empty)\n** Not entering your own password causes a random password to be generated\n\n\nIf database access does not work (\"unable to connect to database\" error message in browser), manually set the DB user's password in <code>/etc/roundcube/debian-db.php</code>. In my case something probably went wrong during the initial setup with <code>dbconfig-common</code>, causing the wrong password to be written to <code>/etc/roundcube/debian-db.php</code>.\n\n\n== Web server configuration ==\n\n=== Package configuration ===\n\nAs is customary on Debian, the package-specific configuration file for Apache is here:\n /etc/roundcube/apache.conf\nAnd a symlink to this was automatically dropped into Apache's configuration folder:\n /etc/apache2/conf.d/roundcube\n\nNo need to touch this file.\n\n\n=== Virtual host configuration ===\n\nI have assigned an Apache vhost to Roundcube that is accessible under https://mail.herzbube.ch/ (previously this was assigned to [[SquirrelMail]]). These are the configuration details: \n\n<pre>\n# --------------------------------------------------------------------------------\n# mail.herzbube.ch\n# --------------------------------------------------------------------------------\n<VirtualHost *:80>\n  ServerName mail.herzbube.ch\n  Redirect permanent \"/\" \"https://mail.herzbube.ch/\"\n</VirtualHost>\n\n# --------------------------------------------------------------------------------\n# SSL Host\n# --------------------------------------------------------------------------------\n<VirtualHost *:443>\n  ServerName mail.herzbube.ch\n  ServerAdmin webmaster@herzbube.ch\n  ErrorLog ${APACHE_LOG_DIR}/mail.herzbube.ch/error.log\n  CustomLog ${APACHE_LOG_DIR}/mail.herzbube.ch/access.log combined\n\n  DocumentRoot /var/lib/roundcube\n\n  <Directory /var/lib/roundcube/>\n    php_admin_flag engine on\n  </Directory>\n\n  Include conf-available/pelargir-herzbube.ch-vhosts-ssl.conf\n</VirtualHost>\n</pre>\n\nNotes:\n* Roundcube already has a <code>robots.txt</code> that disallows all (located in <code>/var/lib/roundcube/robots.txt</code>)\n\n\n=== .htaccess File ===\n\nRoundcube requires a <code>.htaccess</code> file to function properly. On Debian, this is the <code>.htaccess</code> file that takes effect:\n<pre>\nroot@pelargir:~# ls -l /var/lib/roundcube/.htaccess \nlrwxrwxrwx 1 root root 23 May  9 10:59 /var/lib/roundcube/.htaccess -> /etc/roundcube/htaccess\n</pre>\n\nTo make it work, the virtual host configuration must contain the directive <code>AllowOverride All</code> inside a directory clause for <code>/usr/share/roundcube</code>. With older Debian packages it used to be necessary to explicitly add this directive to the vhost configuration, but modern Debian packages already contain the directive inside <code>/etc/apache2/conf-available/roundcube.conf</code>. A symptom if the directive is missing is this browser error message: \"ERROR: Wrong 'suhosin.session.encrypt' option value. Read REQUIREMENTS section in INSTALL file or use Roundcube Installer, please!\"\n\n\n== Roundcube configuration ==\n\nThe main configuration file is\n /etc/roundcube/config.inc.php\n\nIt overrides the default option values that are set in\n /etc/roundcube/defaults.inc.php\n\n\nI changed the following things in <code>config.inc.php</code>:\n* <code>$config['default_host'] = 'tls://mail.herzbube.ch';</code>\n** By default this variable is blank\n** A blank variable causes a textbox to be displayed in the browser where the user has to enter the IMAP server\n** Adding a value here suppresses the textbox\n** Originally I specified <code>localhost</code> here, but after the upgrade to PHP 5.6 (which enables peer verification of SSL certificates by default) I had to specify a hostname that matches the SSL certificate handed out by the IMAP server\n* <code>$config['force_https'] = true;</code>\n** By default this is is set to false\n** The vhost also includes redirection to HTTPS, so strictly speaking this setting is not necessary, but because this is so important I don't mind having a double-insurance policy\n* <code>$config['des_key'] = 'secret';</code>\n** A site-specific key is automatically generated by DebConf, so no need to manually generate it\n** This key is used to encrypt the user's IMAP password in the session record\n** The session record by default is stored in the PostgreSQL database\n** This key is also used to encrypt the password in the client cookie if \"remember password\" is enabled\n* <code>$config['draft_autosave'] = 60;</code>\n** The default is 300 seconds, which is not frequent enough for me\n* <code>$config['enable_spellcheck'] = false;</code>\n** The default value for this is true, but the Debconf-generated <code>config.inc.php</code> sets this to false.\n** I want to have spell checking enabled, so I comment this line\n* Plugin configuration: See next section.\n\n\nThe following are notable options that already have the correct default values (from <code>defaults.inc.php</code>), but which I would like to document here anyway:\n* <code>$config['default_port'] = 143;</code>\n** Port 143 when combined with the <code>tls://</code> prefix used in the \"default_host\" results in TLS over the regular IMAP port (i.e. STARTTLS)! Yay!!!\n** Why I am I writing this? Because this was a long-standing issue with [[SquirrelMail]], which does not support STARTTLS and therefore needs to connect to port 993\n* <code>$config['auto_create_user'] = true;</code>\n** Security-trained eyes will get caught on this option (mine did). The default is already true, and it must be left like this\n** The reason is that Roundcube internally keeps its own user table, and for a login to be successful, not only must it succeed on the IMAP level, in addition Roundcube also requires that a matching user record exists in its own table. Setting this option to true (the default) makes sure that successful IMAP logins automatically get an entry in the roundcube user table\n* <code>$config['spellcheck_engine'] = 'pspell';</code>\n** The default for this in older versions of the Debian packages was \"googie\". This enables a spell checker based on GoogieSpell, which uses a Google service to perform online spell checking. I don't want to depend on Google for this, I prefer the PHP Pspell module instead.\n** Note that for this to work, the Debian packages <code>php-pspell</code> and <code>aspell</code> must be installed. The current version of the Debian package <code>roundcube-core</code> (as of Debian buster) has a \"Recommends\" dependency on <code>php-pspell</code>\n** To completely disable spell checking, add this configuration option to the Roundcube config file: <code>$config['enable_spellcheck'] = false;</code>\n\n\n== Plugins ==\n\n=== General instructions ===\n\nTo enable the plugin, you have to add its name (or better: the plugin's folder name) to <code>/etc/roundcube/config.inc.php</code>. For instance:\n $config['plugins'] = array('emoticons', 'listcommands', 'carddav');\n\n'''IMPORTANT:''' The Roundcube plugin mechanism actually looks for the plugin in <code>/var/lib/roundcube/plugins</code>. To '''really''' make the plugin work, you therefore need a symlink, generated like this:\n ln -s /usr/share/roundcube/plugins/foobar /var/lib/roundcube/plugins/foobar\n\n\nThe plugin may need database tweaks or other stuff. Refer to the plugin's <code>INSTALL</code> file for more details.\n\n\nLast but not least, the plugin may need a configuration file. To keep in line with the Debian Roundcube plugin packages, this configuration file should be placed into the following folder (which you may need to create first)\n /etc/roundcube/plugins/foobar/\n\n'''IMPORTANT:''' When the plugin code executes, the current working directory is set to <code>/usr/share/roundcube</code>. If the config file is in <code>/etc/roundcube</code>, the plugin will therefore '''NOT''' find it, unless it looks for the file under its absolute path (unlikely, since <code>/etc/roundcube</code> is very much Debian specific). Probably the plugin looks for its config file under a relative path, such as <code>plugins/foobar/config.inc.php</code>. This means that you need '''ANOTHER''' symlink to make the whole thing work:\n ln -s /etc/roundcube/plugins/foobar/config.inc.php /usr/share/roundcube/plugins/foobar/config.inc.php\n\n\n=== listcommands ===\n\n* This plugin is part of the Debian package <code>roundcube-plugins-extra</code>\n* The plugin displays links such as \"Subscribe\" and \"Unsubscribe\" when an email is viewed that has been received from a mailing list\n\n\n=== emoticons ===\n\n* This plugin is part of the Debian package <code>roundcube-plugins</code>\n* The plugin inserts nice smileys and other emoticons when the appropriate text representations (e.g. \":-)\") are discovered in the email text\n\n\n=== markasjunk2 ===\n\n* This plugin is part of the Debian package <code>roundcube-plugins-extra</code>\n* The plugin displays links to either mark a message as spam (if it is not in the Junk folder), or as ham (if it '''is''' in the Junk folder)\n* The default configuration is largely OK, I just added the options to let markasjunk2 execute <code>sa-learn</code> when it processes a message. This is how the config file <code>/etc/roundcube/plugins/markasjunk2/config.inc.php</code> looks like:\n<pre>\n$config['markasjunk2_learning_driver'] = 'cmd_learn';\n$config['markasjunk2_spam_cmd'] = 'sa-learn --spam --username=%u %f';\n$config['markasjunk2_ham_cmd'] = 'sa-learn --ham --username=%u %f';\n</pre>\n* If you want to diagnose the plugin, also add this to the config file:\n<pre>\n// The log file is /var/log/roundcube/markasjunk2\n$config['markasjunk2_debug'] = true;\n</pre>\n* Not seen here are the defaults for settings for so-called \"flags\" when a messge is marked as spam or ham. These settings refer to IMAP flags. The default flag that this plugin tries to set when a message is marked as spam is called \"Junk\". This flag is a non-standard flag, described as an extension in [http://tools.ietf.org/html/rfc5232 RFC5232]. I checked whether [[Courier]] on my system handles this flag, but apparently it does not - the message file in question had the same name, regardless of whether I let markasjunk2 set the flag or not. Despite this, I left markasjunk2's default behaviour active, I might look into this on the Courier side at a later time.\n\n\n=== archive ===\n\n* This plugin is part of the Debian package <code>roundcube-plugins</code>\n* This plugin adds a button to move the selected messages to an archive folder. The folder (and the optional structure of subfolders) can be selected in the settings panel.\n\n\n=== zipdownload ===\n\n* This plugin is part of the Debian package <code>roundcube-plugins</code>\n* This plugin adds an option to download all attachments to a message in one zip file, when a message has multiple attachments. The plugin also allows the download of a selection of messages in 1 zip file.\n\n\n== The RCMCardDAV plugin ==\n\n=== Summary ===\n\nOf course I want to have access from my webmail to the contacts that are stored in my [[DAViCal]] server. There is indeed a very nice Roundcube plugin, RCMCardDAV, that does just that. Unfortunately, the Debian Roundcube packages do not contain that plugin, so I have to install it myself.\n\n\n=== References ===\n\n* Website = https://www.benjamin-schieder.de/carddav.html\n* GitHub repo = https://github.com/blind-coder/rcmcarddav\n* Installation instructions for Composer: https://getcomposer.org/download/\n\n\n=== Composer ===\n\nRCMCardDAV's README on GitHub recommends to use \"Composer\", a PHP dependency manager, to install RCMCardDAV's dependencies.\n\nI previously had no experience with Composer, but after a little bit of research, it appears that Composer is simply a single PHP script that is downloaded/installed into a local working directory, in this case the RCMCardDAV directory.\n\nComposer can also be used when installed via Debian package <code>composer</code>. That's my preferred method.\n\n\n=== Installation ===\n\n<pre>\n# Get RCMCardDAV source code\nmkdir -p /usr/local/share/roundcube/plugins\ncd /usr/local/share/roundcube/plugins\ngit clone https://github.com/blind-coder/rcmcarddav.git carddav\n\n# Install RCMCardDAV dependencies\ncd carddav\ncomposer install\n</pre>\n\n\n=== Database ===\n\nRCMCardDAV requires modifications to the Roundcube database scheme. You should '''not''' need to manually apply these changes, RCMCardDAV will apply them automatically when you log into Roundcube the next time after you have enabled RCMCardDAV. It is therefore best to log out of Roundcube before you enable the plugin.\n\n\nRCMCardDAV creates a number of database tables in the Roundcube database, all with the prefix \"carddav_\". To check whether the tables are already present you can list all tables in the Roundcube database with this command. If you use MySQL then the command will be different, of course.\n psql --host=localhost --dbname=roundcube --username=roundcube --command=\"\\d\"\n\n\nIf something goes wrong and you have to manually apply the database scheme changes, you will find the necessary DBMS-specific scripts in this subfolder:\n /usr/local/share/roundcube/plugins/carddav/dbmigrations\n\n\n=== Integration with Debian Roundcube ===\n\nThese commands integrate RCMCardDAV with the Debian Roundcube package. Note that the owner/permission modifications are important because when we are finished the config file will contain a password.\n<pre>\nln -s /usr/local/share/roundcube/plugins/carddav /usr/share/roundcube/plugins/carddav\nln -s /usr/share/roundcube/plugins/carddav /var/lib/roundcube/plugins/carddav\nmkdir /etc/roundcube/plugins/carddav\ncp /usr/local/share/roundcube/plugins/carddav/config.inc.php.dist /etc/roundcube/plugins/carddav/config.inc.php\nln -s /etc/roundcube/plugins/carddav/config.inc.php /usr/share/roundcube/plugins/carddav/config.inc.php\nchgrp www-data /etc/roundcube/plugins/carddav/config.inc.php\nchmod 640 /etc/roundcube/plugins/carddav/config.inc.php\n</pre>\n\n\n=== RCMCardDAV configuration ===\n\nEdit the config file\n /etc/roundcube/plugins/carddav/config.inc.php\n\nAdd the following block at the end. This will add a so-called \"preset\" address book that all Roundcube users have access to. Obviously you need to change the details in this example so that they match your own setup.\n<pre>\n$prefs['_GLOBAL']['pwstore_scheme'] = 'encrypted';\n\n$prefs['addressbookshare'] = array(\n  // required attributes\n  'name'         =>  'Shared address book',\n  // will be substituted for the roundcube username\n  'username'     =>  'addressbookshare',\n  // will be substituted for the roundcube password\n  'password'     =>  'secret',\n  // %u will be substituted for the CardDAV username\n  'url'          =>  'https://cal.herzbube.ch/caldav.php/%u',\n  'refresh_time' => '01:00:00',\n);\n</pre>\n\n\n=== Usage ===\n\nLaunch the web browser and log in to Roundcube to use your shiny new address book. Some notes:\n\n* The address book is generated only when the user logs in. '''IMPORTANT:''' If you were logged in while you made changes to the RCMCardDAV plugin's config file, you have to log out and log in again before you can see the newly configured address book!!!\n* Basically everything should be working now, e.g. start composing a new mail and when you enter something into the address field, RCMCardDAV should suggest matching contacts\n* On the \"Address Book\" page the global preset, and any user-specific, address books should now appear. If an address book is not read-only, you can now modify its entries or add new/remove existing entries\n\n\nOn the \"Settings\" page it is possible to add a user-specific address book\n* The configuration details for such an address book are stored in the database (as opposed to the global preset address book whose configuration details we added to the plugin config file)\n* The password entered by the user for the address book is encrypted with the user's IMAP password, because in the plugin config file we set the option \"pwstore_scheme\" to \"encrypted\"\n* If the user changes his or her IMAP password, the address book password cannot be decrypted anymore and must be re-entered\n\n\n== Troubleshooting ==\n\n=== Logging ===\n\nRoundcube can send logging output to syslog, but by default it sends logging output to files. The log files are placed in <code>/var/lib/roundcube/logs</code>, which on Debian is a symlink to this folder:\n /var/log/roundcube\n\nThere are numerous options that can be set in <code>/etc/roundcube/config.inc.php</code>, to see them all check out the content of the defaults config file <code>/etc/roundcube/defaults.inc.php</code>. Two options that I have used so far:\n<pre>\n// Log IMAP conversation to <log_dir>/imap or to syslog\n$config['imap_debug'] = true;\n</pre>\n\n\nThe following line, if added to a plugin's source file, will send logging output to a file in the logging folder:\n write_log(\"plugin.warn\", \"message\");\n\nIn the example, \"plugin.warn\" forms a selector that sends the output to a file <code>plugin.log</code> using the \"warn\" level. Without the trailing \".warn\" the output will probably be suppressed by a configuration option somewhere in the Roundcube or the syslog configuration (I don't know where exactly).\n\n\n=== RCMCardDAV ===\n\nTo get useful diagnostics information from the RCMCardDAV plugin, find the source file that contains the functions <code>debug()</code> and <code>debug_http()</code>. In these functions, change the lines that invoke <code>write_log()</code> so that they use \"carddav.warn\" instead of just \"carddav\". Then change the constants <code>DEBUG</code> and/or <code>DEBUG_HTTP</code> to true.\n\nWarning: <code>DEBUG_HTTP</code> generates massive amounts of log output, so you should start slowly and just use <code>DEBUG</code> at first.\n\n\n=== Roundcube does not display dates ===\n\nAfter upgrading to version 0.9.5-3 (I don't recall the previous version), Roundcube no longer displays any dates.\n\nIt appears that the solution is to set the timezone in <code>php.ini</code> (actually <code>/etc/php5/apache2/php.ini</code>):\n date.timezone = Europe/Zurich\n\nAfter the change Apache needs to be restarted.\n\n\n[[Category:End User Service]]\n[[Category:Web Application]]\n[[Category:Database Application]]\n[[Category:Email]]"
                    }
                ]
            },
            "1647": {
                "pageid": 1647,
                "ns": 0,
                "title": "Rsync",
                "revisions": [
                    {
                        "contentformat": "text/x-wiki",
                        "contentmodel": "wikitext",
                        "*": "== Debian packages ==\n\nThe following Debian packages need to be installed:\n\n rsync\n\n\n== References ==\n\nHow to setup an <tt>rsync</tt> server:\n\n man rsyncd.conf\n\n\n== Configuration ==\n\nTo let <tt>/etc/init.d/rsync</tt> start the daemon, the following change needs to be made to <tt>/etc/default/rsync</tt>:\n\n RSYNC_ENABLE=true\n\n\nCreate the file <tt>/etc/rsyncd.conf</tt> with the following content:\n\n<pre>\n[backups]\npath = /var/backups\nread only = true\nhosts allow = 127.0.0.1 192.168.0.0/16\nexclude = lost+found *\ninclude = boot/*** etc/*** git/*** home/*** ldap/*** mysql/*** usr.local/*** var.lib/*** var.samba/*** var.www/***\n\n[mp3]\npath = /var/samba/media/mp3\nread only = true\nhosts allow = 127.0.0.1 192.168.0.0/16\nuid = patrick\n\n[itunes]\npath = /var/samba/media/iTunes Media\nread only = true\nhosts allow = 127.0.0.1 192.168.0.0/16\nuid = patrick\n\n[electricsheep]\npath = /var/www/herzbube.ch/electricsheep\nread only = false\nhosts allow = 127.0.0.1 192.168.0.0/16\n</pre>\n\n\nDiscussion:\n* Four modules named \"backup\", \"mp3\", \"itunes\" and \"electricsheep\" are created\n* \"backup\" module\n** The module provides read-only access to the directory <tt>/var/backups</tt>\n** Only clients in the network 192.168.0.0/16 can access the module\n** No authentification is required\n** The file or directory \"lost+found\" is not served\n** All other files or directories are also not served, unless they are explicitly named on the \"include\" line\n** On the \"include\" line, triple asterisks are necessary to allow the '''content''' of the folder to be served; without an asterisk, only the directory but not its content is served; one or two asterisks are, for some unfathomable reason, not good syntax and the entire directory is not served\n* \"mp3\" and \"iTunes\" modules\n** Most of the stuff above also applies to these modules\n** In addition, authentication is required for user patrick\n* \"electricsheep\" module\n** This module provides read+write access\n\n\n== Server side ==\n\nThere are different modes how <tt>rsync</tt> can be run on the server side. At the moment, I am only interested in the Daemon mode, because that is what is required for my purposes:\n* my client should run from a cron service on my Mac\n* my client should not need to authenticate\n\nIf authentication is necessary and my client (run from cron) should still perform an automatic login, some SSH configuration is required: possibly the <tt>.ssh/config</tt> file, but I am not sure about this.\n\n\n== Client side ==\n\n<span style=\"color:red;\">'''Important:'''</span> Mac OS X ships with an ancient and outdated version of rsync (2.6.9) that attempts to support extended attributes with the <code>-E</code> option, added by Apple. This Apple contribution does not seem to work properly, for instance when I tried to backup my iPhoto Library into a sparse bundle located on a Samba network filesystem, the Apple-modified version of <code>rsync</code> always sync'ed all the files that had extended attributes, even if the files and attributes hadn't changed at all. <span style=\"color:red;\">On Mac OS X, install a recent version of rsync via Homebrew</span> or a similar package manager.\n\n\n'''Preliminary notes:'''\n* The <code>-a</code> option is a shortcut that performs the sync in \"archive\" mode. <code>-a</code> implies a large number of other options such as <code>-r</code> for recursive sync and <code>-p</code> for preserving permissions. For details see the man page.\n* The <code>-a</code> option omits some options for things that might be difficult to preserve, depending on the target filesystem type:\n** The <code>-X</code> option preserves extended attributes. On Mac OS X this is an important option because resource forks are stored in an extended attribute (xattr name \"com.apple.ResourceFork\"). The Finder is also known to store information in an extended attribute (xattr name \"com.apple.FinderInfo\"), and one other commonly seen xattr is \"com.apple.quarantine\" for files downloaded from the Internet.\n** The <code>-A</code> option preserves ACLs\n** The <code>-H</code> option preserves hard links\n* The <code>-z</code> option compresses file data during the transfer. TODO: It is unclear whether compression occurs also if two local filesystem paths are synced.\n\n\nTo get a copy of an exported module:\n<pre>\n# Files in the destination folder that don't exist in the exported module are not deleted\nrsync -avzX pelargir::backup ~/Desktop/backup\n\n# Also delete files in the destination folder that don't exist in the exported module\nrsync -avzX --delete pelargir::backup ~/Desktop/backup\n</pre>\n\nTo list all available modules:\n rsync pelargir::\n\nTo incrementally copy files to a writable module (files on the destination side are never deleted, even if they disappear on the source side):\n rsync -tqz ~/Library/Application\\ Support/ElectricSheep/*.mpg pelargir::electricsheep\n\nAccess from cron\n<pre>\n0 21 * * *  rsync -aqzX --delete pelargir::backup ~/Desktop/backup\n</pre>\n\n\n== Advanced synchronization examples ==\n\nThis creates the folder <code>./dst/src</code> and synchronizes its content with the source folder. Anything else that exists directly below <code>./dst</code> remains untouched.\n<pre>\nrsync -avzX --delete ./src ./dst\n</pre>\n\n\nThis synchronizes the content of the <code>./src</code> folder into the <code>./dst</code> folder. Anything that exists directly below <code>./dst</code> and that is not in <code>./src</code> is deleted. The difference to the previous example is the trailing slash after the source folder name.\n<pre>\nrsync -avzX --delete ./src/ ./dst\n</pre>\n\n\nThis excludes the folder (or file) <code>foo</code> from the sync. The <code>--delete-excluded</code> option makes sure that the excluded folder (or file) is also removed from the destination folder - this may be necessary if a previous sync included the folder (or file).\n<pre>\nrsync -avzX --delete --exclude=/foo --delete-excluded ./src/ ./dst\n\n# IMPORTANT: The exclude pattern must include the \"src\" folder if the \"src\" folder is created within the destination folder.\nrsync -avzX --delete --exclude=/src/foo --delete-excluded ./src ./dst\n</pre>\n\n\n[[Category:End User Service]]"
                    }
                ]
            }
        }
    }
}