diff --git a/b2/_internal/console_tool.py b/b2/_internal/console_tool.py index 03219db72..329235e52 100644 --- a/b2/_internal/console_tool.py +++ b/b2/_internal/console_tool.py @@ -2405,7 +2405,11 @@ def run(self) -> None: self.messages_queue.put(self.END_MARKER) def _run_removal(self, executor: Executor): - for file_version, _ in self.runner._get_ls_generator(self.args): + for file_version, subdirectory in self.runner._get_ls_generator(self.args): + if subdirectory is not None: + # This file_version is not for listing/deleting. + # It is only here to list the subdirectory, so skip deleting it. + continue # Obtaining semaphore limits number of elements that we fetch from LS. self.semaphore.acquire(blocking=True) # This event is updated before the semaphore is released. This way, diff --git a/changelog.d/+fix-rm-non-recursive.fixed.md b/changelog.d/+fix-rm-non-recursive.fixed.md new file mode 100644 index 000000000..932b78cb6 --- /dev/null +++ b/changelog.d/+fix-rm-non-recursive.fixed.md @@ -0,0 +1,2 @@ +Fixed a bug where `rm bucketName folderName` command without the `--recursive` flag would +remove a file from every subdirectory inside `folderName`. diff --git a/test/unit/test_console_tool.py b/test/unit/test_console_tool.py index 9d221eef2..ab397fd52 100644 --- a/test/unit/test_console_tool.py +++ b/test/unit/test_console_tool.py @@ -2599,6 +2599,9 @@ def test_rm_no_recursive(self): expected_stdout = ''' a/test.csv a/test.tsv + b/b/test.csv + b/b1/test.csv + b/b2/test.tsv c/test.csv c/test.tsv '''