What is the syntax of lftp's mirror -x (exclude) option?

I want to mirror a directory using lftp but I want to exclude certain subdirectories.

I tried

mirror -R -e -x ^\.svn$ /documents/ /test

and

mirror -R -e -x /^\.svn$/ /documents/ /test

but neither of them excluded the .svn directories.


mirror -R -e -x ^\.svn$ /documents/ /test is just fine.

The trick is, as .svn is a directory it will only be matched by a pattern that ends in a slash:

mirror -R -e -x ^\.svn/$ /documents/ /test


From my experiments, it seems the include and exclude patterns are matched against the whole path with no initial / but with a trailing / for a directory.

Thus if you're trying to match a directory name like .svn which can occur at any level in the tree, you need this RE:

(^\|/).svn/

The ^ alternative matches .svn at the top level and the / alternative matches any level below that.

The | character is significant to lftp so needs to be sloshed.


I'm using

--exclude /\..+/$

to exclude all folders starting with a dot.