Skip to content

Instantly share code, notes, and snippets.

@thcipriani
Last active February 21, 2018 16:18
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save thcipriani/350ad7015eba1a7456294c8ccff08bd3 to your computer and use it in GitHub Desktop.
Save thcipriani/350ad7015eba1a7456294c8ccff08bd3 to your computer and use it in GitHub Desktop.
It seems that if we explicitly ignore a file, when that file exists on an rsync target in a deleted directory, rsync --delete will refuse to delete that directory
#!/usr/bin/env bash
set -x
mkdir -p rsync1/versions/version1/cache/l10n
touch rsync1/versions/version1/cache/l10n/en.cdb
touch rsync1/versions/version1/cache/l10n/en.json
rsync -avz --delete --exclude='**/cache/l10n/*.cdb' rsync1/ rsync2/
touch rsync2/versions/version1/cache/l10n/en.cdb
rm -rf rsync1/versions/version1
rsync -avz --delete --exclude='**/cache/l10n/*.cdb' rsync1/ rsync2/
# Example run
# ----------
# + mkdir -p rsync1/versions/version1/cache/l10n
# + touch rsync1/versions/version1/cache/l10n/en.cdb
# + touch rsync1/versions/version1/cache/l10n/en.json
# + rsync -avz --delete '--exclude=**/cache/l10n/*.cdb' rsync1/ rsync2/
# sending incremental file list
# created directory rsync2
# ./
# versions/
# versions/version1/
# versions/version1/cache/
# versions/version1/cache/l10n/
# versions/version1/cache/l10n/en.json
#
# sent 246 bytes received 87 bytes 666.00 bytes/sec
# total size is 0 speedup is 0.00
# + touch rsync2/versions/version1/cache/l10n/en.cdb
# + rm -rf rsync1/versions/version1
# + rsync -avz --delete '--exclude=**/cache/l10n/*.cdb' rsync1/ rsync2/
# sending incremental file list
# deleting versions/version1/cache/l10n/en.json
# cannot delete non-empty directory: versions/version1/cache/l10n
# cannot delete non-empty directory: versions/version1/cache/l10n
# cannot delete non-empty directory: versions/version1/cache
# cannot delete non-empty directory: versions/version1/cache
# cannot delete non-empty directory: versions/version1
#
# sent 95 bytes received 372 bytes 934.00 bytes/sec
# total size is 0 speedup is 0.00
#!/usr/bin/env bash
set -x
mkdir -p rsync1/versions/version1/cache/l10n
touch rsync1/versions/version1/cache/l10n/en.cdb
touch rsync1/versions/version1/cache/l10n/en.json
rsync -avz --delete --exclude='**/cache/l10n/*.cdb' rsync1/ rsync2/
touch rsync2/versions/version1/cache/l10n/en.cdb
rm -rf rsync1/versions/version1
rm -rf rsync2/versions/version1/cache/l10n/en.cdb # <--- This line is needed because we explicitly --exclude cdb files!
rsync -avz --delete --exclude='**/cache/l10n/*.cdb' rsync1/ rsync2/
# Example Run
# ----------
# + mkdir -p rsync1/versions/version1/cache/l10n
# + touch rsync1/versions/version1/cache/l10n/en.cdb
# + touch rsync1/versions/version1/cache/l10n/en.json
# + rsync -avz --delete '--exclude=**/cache/l10n/*.cdb' rsync1/ rsync2/
# sending incremental file list
# created directory rsync2
# ./
# versions/
# versions/version1/
# versions/version1/cache/
# versions/version1/cache/l10n/
# versions/version1/cache/l10n/en.json
#
# sent 240 bytes received 87 bytes 654.00 bytes/sec
# total size is 0 speedup is 0.00
# + touch rsync2/versions/version1/cache/l10n/en.cdb
# + rm -rf rsync1/versions/version1
# + rm -rf rsync2/versions/version1/cache/l10n/en.cdb
# + rsync -avz --delete '--exclude=**/cache/l10n/*.cdb' rsync1/ rsync2/
# sending incremental file list
# deleting versions/version1/cache/l10n/en.json
# deleting versions/version1/cache/l10n/
# deleting versions/version1/cache/
# deleting versions/version1/
#
# sent 93 bytes received 136 bytes 458.00 bytes/sec
# total size is 0 speedup is 0.00
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment