... | ... |
@@ -581,6 +581,17 @@ def cmd_info(args): |
581 | 581 |
else: |
582 | 582 |
raise |
583 | 583 |
|
584 |
+def do_deletes(s3, dst_list): |
|
585 |
+ # Delete items in destination that are not in source |
|
586 |
+ if cfg.dry_run: |
|
587 |
+ for key in dst_list: |
|
588 |
+ output(u"delete: %s" % dst_list[key]['object_uri_str']) |
|
589 |
+ else: |
|
590 |
+ for key in dst_list: |
|
591 |
+ uri = S3Uri(dst_list[key]['object_uri_str']) |
|
592 |
+ s3.object_delete(uri) |
|
593 |
+ output(u"deleted: '%s'" % uri) |
|
594 |
+ |
|
584 | 595 |
def cmd_sync_remote2remote(args): |
585 | 596 |
s3 = S3(Config()) |
586 | 597 |
|
... | ... |
@@ -621,15 +632,8 @@ def cmd_sync_remote2remote(args): |
621 | 621 |
return |
622 | 622 |
|
623 | 623 |
# Delete items in destination that are not in source |
624 |
- if cfg.delete_removed: |
|
625 |
- if cfg.dry_run: |
|
626 |
- for key in dst_list: |
|
627 |
- output(u"delete: %s" % dst_list[key]['object_uri_str']) |
|
628 |
- else: |
|
629 |
- for key in dst_list: |
|
630 |
- uri = S3Uri(dst_list[key]['object_uri_str']) |
|
631 |
- s3.object_delete(uri) |
|
632 |
- output(u"deleted: '%s'" % uri) |
|
624 |
+ if cfg.delete_removed and not cfg.delete_after: |
|
625 |
+ do_deletes(s3, dst_list) |
|
633 | 626 |
|
634 | 627 |
# Perform the synchronization of files |
635 | 628 |
timestamp_start = time.time() |
... | ... |
@@ -655,6 +659,10 @@ def cmd_sync_remote2remote(args): |
655 | 655 |
else: |
656 | 656 |
info(outstr) |
657 | 657 |
|
658 |
+ # Delete items in destination that are not in source |
|
659 |
+ if cfg.delete_removed and cfg.delete_after: |
|
660 |
+ do_deletes(s3, dst_list) |
|
661 |
+ |
|
658 | 662 |
def cmd_sync_remote2local(args): |
659 | 663 |
def _parse_attrs_header(attrs_header): |
660 | 664 |
attrs = {} |
... | ... |
@@ -1499,6 +1507,7 @@ def main(): |
1499 | 1499 |
|
1500 | 1500 |
optparser.add_option( "--delete-removed", dest="delete_removed", action="store_true", help="Delete remote objects with no corresponding local file [sync]") |
1501 | 1501 |
optparser.add_option( "--no-delete-removed", dest="delete_removed", action="store_false", help="Don't delete remote objects.") |
1502 |
+ optparser.add_option( "--delete-after", dest="delete_after", action="store_true", help="Perform deletes after new uploads [sync]") |
|
1502 | 1503 |
optparser.add_option("-p", "--preserve", dest="preserve_attrs", action="store_true", help="Preserve filesystem attributes (mode, ownership, timestamps). Default for [sync] command.") |
1503 | 1504 |
optparser.add_option( "--no-preserve", dest="preserve_attrs", action="store_false", help="Don't store FS attributes") |
1504 | 1505 |
optparser.add_option( "--exclude", dest="exclude", action="append", metavar="GLOB", help="Filenames and paths matching GLOB will be excluded from sync") |
... | ... |
@@ -186,6 +186,9 @@ Delete remote objects with no corresponding local file |
186 | 186 |
\fB\-\-no\-delete\-removed\fR |
187 | 187 |
Don't delete remote objects. |
188 | 188 |
.TP |
189 |
+\fB\-\-delete\-after\fR |
|
190 |
+Perform deletes after new uploads [sync]. |
|
191 |
+.TP |
|
189 | 192 |
\fB\-p\fR, \fB\-\-preserve\fR |
190 | 193 |
Preserve filesystem attributes (mode, ownership, |
191 | 194 |
timestamps). Default for [sync] command. |