Bug 10748 - 3.1.0 and 3.1.1 create all dirs on target even with --prune-empty-dirs
3.1.0 and 3.1.1 create all dirs on target even with --prune-empty-dirs
Status: NEW
Product: rsync
Classification: Unclassified
Component: core
All All
: P5 major
: ---
Assigned To: Wayne Davison
Rsync QA Contact
Depends on:
  Show dependency treegraph
Reported: 2014-07-29 05:37 UTC by Linda Walsh
Modified: 2019-02-26 16:37 UTC (History)
0 users

See Also:


Note You need to log in before you can comment on or make changes to this bug.
Description Linda Walsh 2014-07-29 05:37:41 UTC
I'm doing an rsync from a snapshot to an empty "diffdir"
**minus** the basedir, as in "--compare-dest" in below
args... :

<rsync command>  arglist = qw( --8-bit-output --acls 
 --archive --hard-links --human-readable --no-inc-recursive 
 --one-file-system --prune-empty-dirs --whole-file --xattrs ), 
 "--compare-dest=$base_lvh->fs_mp/.") <snapshotdir> <diffdir>

Unfortunately, it's creating *ALL* of the dirs on the source,
changed or not.

After the above was run, the "diffdir" contained 560515 dirs,
of which 386220 were empty. Deleting them freed up almost
300MB on a 600MB "diff".  *ouch*.

This breaks (I'm working on a hack-around) my snapshot
script as it does a "du" of the source and expects
that the copied files should fit in a sized-to-fit
volume that is 125% of the original sources (but doesn't
when a bunch are dirs).

Anyway... only 31% of the directories it copied were
needed -- 69% of the directories were empty.  

What happened?  It didn't used to create such an excess...
Comment 1 walter 2019-02-26 13:51:53 UTC
5 years later, I detect the same problem - which is critical for me.

why has nothing happened on that bug?
Comment 2 Kevin Korb 2019-02-26 16:37:21 UTC
--prune-empty-dirs only affects the file list that rsync is working from.  That means it handles dirs that are either really empty on the source or anything that has been emptied via --exclude or --filter.  Options that modify the way rsync stores stuff but not the list of stuff it is processing are not affected by --prune-empty-dirs.  That would apply to the 3 --*-dest options.  As long as there are files on the source that haven't been excluded or filtered they are still in the listing that rsync is processing so the directory is not empty.