mirror of
				https://github.com/python/cpython.git
				synced 2025-10-30 21:21:22 +00:00 
			
		
		
		
	GH-73991: Add pathlib.Path.move() (#122073)
				
					
				
			Add a `Path.move()` method that moves a file or directory tree, and returns a new `Path` instance pointing to the target. This method is similar to `shutil.move()`, except that it doesn't accept a *copy_function* argument, and it doesn't check whether the destination is an existing directory.
This commit is contained in:
		
							parent
							
								
									aa905925e1
								
							
						
					
					
						commit
						625d0705b9
					
				
					 6 changed files with 225 additions and 4 deletions
				
			
		|  | @ -14,7 +14,7 @@ | |||
| import functools | ||||
| import operator | ||||
| import posixpath | ||||
| from errno import EINVAL | ||||
| from errno import EINVAL, EXDEV | ||||
| from glob import _GlobberBase, _no_recurse_symlinks | ||||
| from stat import S_ISDIR, S_ISLNK, S_ISREG, S_ISSOCK, S_ISBLK, S_ISCHR, S_ISFIFO | ||||
| from pathlib._os import copyfileobj | ||||
|  | @ -928,6 +928,25 @@ def replace(self, target): | |||
|         """ | ||||
|         raise UnsupportedOperation(self._unsupported_msg('replace()')) | ||||
| 
 | ||||
|     def move(self, target): | ||||
|         """ | ||||
|         Recursively move this file or directory tree to the given destination. | ||||
|         """ | ||||
|         self._ensure_different_file(target) | ||||
|         try: | ||||
|             return self.replace(target) | ||||
|         except UnsupportedOperation: | ||||
|             pass | ||||
|         except TypeError: | ||||
|             if not isinstance(target, PathBase): | ||||
|                 raise | ||||
|         except OSError as err: | ||||
|             if err.errno != EXDEV: | ||||
|                 raise | ||||
|         target = self.copy(target, follow_symlinks=False, preserve_metadata=True) | ||||
|         self.delete() | ||||
|         return target | ||||
| 
 | ||||
|     def chmod(self, mode, *, follow_symlinks=True): | ||||
|         """ | ||||
|         Change the permissions of the path, like os.chmod(). | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue
	
	 Barney Gale
						Barney Gale