purge-empty-dirs and max-file-size confusion

Ian! D. Allen idallen at idallen.ca
Fri Apr 24 13:12:57 GMT 2009


On Fri, Apr 24, 2009 at 10:23:06AM +0200, Paul Slootman wrote:
> I don't think the intention is to actually delete empty directories at
> the receiving end; only to prevent them being created.

I have not yet found out how to prevent empty directories from being
created when using "--max-size" or "--min-size".  As I showed in
my original post to this list, "--prune-empty-dirs" does not do it.
Either the man page is wrong/misleading/incomplete, I am misunderstanding
it badly, or rsync is broken.  I am fully prepared to believe that I
am misunderstanding something and will happly work on a better man page
wording when the truth is revealed to me.  I've supplied a short script
below that you can use to see the problem yourself.

> So once they're created due to perhaps an earlier invocation without
> purge-empty-dirs, you'll have to remove them by hand.

As my script below shows, the destination directory does not even exist.
There is no previously-created content in it at all, and yet rsync
creates empty directories even though I say "--prune-empty-dirs".  Why?
How do I make "--prune-empty-dirs" do what the man page says it does?

#!/bin/sh -u

# start with fresh empy directories for source and destination
tmp1=/tmp/one$$
tmp2=/tmp/two$$
rm -rf $tmp1 $tmp2

echo '*** create the source directory with six subdirectories'
for i in 1 2 3 4 5 6 ; do
    mkdir -p $tmp1/dir$i
done

echo '*** create three small files in dir1 dir2 dir3'
for i in 1 2 3 ; do
    dd bs=1M count=1 if=/dev/zero of=$tmp1/dir$i/smallfile
done

echo '*** create three big files in dir4 dir5 dir6'
for i in 4 5 6 ; do
    dd bs=1M count=11 if=/dev/zero of=$tmp1/dir$i/BIGFILE
done

echo '*** rsync should copy only the big files and prune all empty directories'
rsync -ai --min-size 10M --prune-empty-dirs $tmp1 $tmp2

echo '*** "find" should show no empty directories, but there are three - why?'
find $tmp2 -empty

echo '*** replace --min-size with an --exclude and it works fine:'
rm -r $tmp2
rsync -ai --exclude smallfile --prune-empty-dirs $tmp1 $tmp2
find $tmp2 -empty   # shows no output - this is correct and expected

echo "*** Why doesn't --prune-empty-dirs work with --min-size and --max-size?"

rm -r $tmp1 $tmp2

-- 
| Ian! D. Allen  -  idallen at idallen.ca  -  Ottawa, Ontario, Canada
| Home Page: http://idallen.com/   Contact Improv: http://contactimprov.ca/
| College professor (Open Source / Linux) via: http://teaching.idallen.com/
| Defend digital freedom:  http://eff.org/  and have fun:  http://fools.ca/


More information about the rsync mailing list