From a272ff8c1bdd551e697f06b4d51bfd84aa13a064 Mon Sep 17 00:00:00 2001 From: Wayne Davison Date: Sat, 28 Jan 2006 00:13:52 +0000 Subject: [PATCH] Changed --skip-empty-dirs (-k) to --prune-empty-dirs (-m) and improved the docs a bit more, including documenting how "protect" filtering affects empty dirs. --- rsync.yo | 28 +++++++++++++++++++++------- 1 file changed, 21 insertions(+), 7 deletions(-) diff --git a/rsync.yo b/rsync.yo index 6ddfe221..087912bc 100644 --- a/rsync.yo +++ b/rsync.yo @@ -349,7 +349,7 @@ to the detailed description below for a complete description. verb( --partial keep partially transferred files --partial-dir=DIR put a partially transferred file into DIR --delay-updates put all updated files into place at end - -k, --skip-empty-dirs skip empty directory chains + -m, --prune-empty-dirs prune empty directory chains from file-list --numeric-ids don't map uid/gid values by user/group name --timeout=TIME set I/O timeout in seconds -I, --ignore-times don't skip files that match size and time @@ -1386,21 +1386,35 @@ See also the "atomic-rsync" perl script in the "support" subdir for an update algorithm that is even more atomic (it uses bf(--link-dest) and a parallel hierarchy of files). -dit(bf(-k, --skip-empty-dirs)) This option tells the receiving rsync to get +dit(bf(-m, --prune-empty-dirs)) This option tells the receiving rsync to get rid of empty directories from the file-list, including nested directories that have no non-directory children. This is useful for avoiding the creation of a bunch of useless directories when the sending rsync is recursively scanning a hierarchy of files using include/exclude/filter -directives. This also affects what directories get deleted when a delete -option was specified (but keep in mind that excluded files are also -protected from deletion). +rules. + +Because the file-list is actually being pruned, this option also affects +what directories get deleted when a delete is active. However, keep in +mind that excluded files and directories can prevent existing items from +being deleted (because an exclude hides source files and protects +destination files). + +You can prevent the pruning of certain empty directories from the file-list +by using a global "protect" filter. For instance, this option would ensure +that the directory "emptydir" was kept in the file-list: + +quote( --filter 'protect emptydir/') Here's an example that copies all .pdf files in a hierarchy, only creating the necessary destination directories to hold the .pdf files, and ensures that any superfluous files and directories in the destination are removed -(due to a hide filter on non-directories being used instead of an exclude): +(note the hide filter of non-directories being used instead of an exclude): + +quote( rsync -avm --del --include='*.pdf' -f 'hide! */' src/ dest) -quote( rsync -avk --del --include='*.pdf' -f 'hide! */' src/ dest) +If you didn't want to remove superfluous destination files, the more +time-honored options of "--include='*/' --exclude='*'" would work fine +in place of the hide-filter (if that is more natural to you). dit(bf(--progress)) This option tells rsync to print information showing the progress of the transfer. This gives a bored user -- 2.34.1