I'm using

rsync . $HOST:$PATH --itemize-changes --verbose --human-readable --times --checksum --recursive --delete --delete-excluded --force --filter='dir-merge .rsync-filter'

and .rsync-filter looks like this:

exclude .gitinstructions
exclude .gitignore
exclude .rsync-filter
exclude .gitlab-ci.yml
exclude .git
exclude timestamp.txt
exclude var
exclude LICENSE.html
exclude LICENSE.txt
exclude LICENSE_AFL.txt
exclude RELEASE_NOTES.txt
exclude config.json

protect media/**/*

Although on the remote, the media folder is being deleted:

$ rsync . $SSH_HOST:$SSH_STAGEPATH --itemize-changes --verbose --human-readable --times --checksum --recursive --delete --delete-excluded --force --filter='dir-merge .rsync-filter' sending incremental file list .d..t...... ./ *deleting media/test *deleting media/

sent 680.12K bytes received 28.00K bytes 472.08K bytes/sec total size is 139.20M speedup is 196.58

Am I missing anything? I basically want all the "excluded files/dirs" to not be uploaded, but deleted on the remote, and the "protected files/dirs" to not be uploaded and not be deleted. I was sure I am following the correct syntax from the man page.

1 Answer 1


Could you confirm the problem persists when you put

protect media/**/*

at the top of your .rsync-filter ?
In your example, it is at the bottom of the filter.

From the rsync man page:

Note that if you are supplying your own filter rules, you may need to manually insert your own exclude/protect rule somewhere higher up in the list so that it has a high enough priority to be effective (e.g., if your rules specify a trailing inclusion/exclusion of oq*cq, the auto-added rule would never be reached).

  • awh, i can't believe i missed that. i'll try it later on when a have a good time to test it. thanks.
    – bitten
    Dec 2, 2016 at 9:46

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .