mirror of
				https://git.launchpad.net/livecd-rootfs
				synced 2025-10-31 08:54:06 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			39 lines
		
	
	
		
			1.1 KiB
		
	
	
	
		
			Python
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			39 lines
		
	
	
		
			1.1 KiB
		
	
	
	
		
			Python
		
	
	
		
			Executable File
		
	
	
	
	
| #!/usr/bin/python3
 | |
| 
 | |
| # usage: sync-mtime src dst
 | |
| #
 | |
| # synchronize atime/mtime on files between src and dst.
 | |
| #
 | |
| # src and dst are directories, where dst is expected to contain a subset of the
 | |
| # files found in src. for each file present in dst or a subdirectory thereof,
 | |
| # if atime/mtime differ between the same file in src and that file in dst,
 | |
| # update atime/mtime on the file in dst.
 | |
| 
 | |
| import os
 | |
| import sys
 | |
| from pathlib import Path
 | |
| 
 | |
| 
 | |
| def time_eq(a: os.stat_result, b: os.stat_result) -> bool:
 | |
|     return (
 | |
|         (a.st_mtime_ns == b.st_mtime_ns) and
 | |
|         (a.st_atime_ns == b.st_atime_ns)
 | |
|     )
 | |
| 
 | |
| 
 | |
| src, dst = sys.argv[1:]
 | |
| for dirpath, dirnames, filenames in Path(dst).walk():
 | |
|     for filename in filenames:
 | |
|         dst_file = dirpath / filename
 | |
|         if not dst_file.is_file():
 | |
|             continue
 | |
|         src_file = src / dst_file.relative_to(dst)
 | |
| 
 | |
|         src_stat = src_file.stat(follow_symlinks=False)
 | |
|         dst_stat = dst_file.stat(follow_symlinks=False)
 | |
|         if time_eq(src_stat, dst_stat):
 | |
|             continue
 | |
| 
 | |
|         ns = (src_stat.st_atime_ns, src_stat.st_mtime_ns)
 | |
|         os.utime(dst_file, ns=ns, follow_symlinks=False)
 |