我的知识记录

复制文件夹怎么不改变修改日期(图文)

复制文件夹时保持原有的修改日期有以下几种方法:

1. Windows系统

使用Robocopy命令


 
cmd
# 保持所有时间戳不变 robocopy "源文件夹路径" "目标文件夹路径" /E /COPYALL /DCOPY:T # 参数说明: # /E - 复制所有子目录(包括空目录) # /COPYALL - 复制所有文件信息(数据、属性、时间戳等) # /DCOPY:T - 复制目录时间戳

PowerShell方式


 
powershell
# 复制文件夹并保持时间戳 Copy-Item -Path "源文件夹" -Destination "目标文件夹" -Recurse # 手动同步时间戳 Get-ChildItem -Path "源文件夹" -Recurse | ForEach-Object { $sourceItem = $_ $destPath = $sourceItem.FullName.Replace("源文件夹", "目标文件夹") if (Test-Path $destPath) { if ($sourceItem.PSIsContainer) { # 更新目录时间戳 $(Get-Item $destPath).LastWriteTime = $sourceItem.LastWriteTime } else { # 更新文件时间戳 $(Get-Item $destPath).LastWriteTime = $sourceItem.LastWriteTime } } }

2. Mac/Linux系统

使用cp命令


 
bash
# 复制文件夹并保持所有属性 cp -rp "源文件夹" "目标文件夹" # 或者使用 -a 参数(归档模式) cp -a "源文件夹" "目标文件夹" # 参数说明: # -r - 递归复制目录 # -p - 保持文件属性(时间戳、权限等) # -a - 归档模式,相当于 -dpR

使用rsync命令


 
bash
# 使用rsync保持时间戳 rsync -av "源文件夹/" "目标文件夹/" # 参数说明: # -a - 归档模式,保持所有属性 # -v - 显示详细过程

3. 跨平台解决方案

Python脚本


 
python
import shutil import os from pathlib import Path def copy_folder_preserve_timestamp(source, destination): # 复制整个目录树 shutil.copytree(source, destination, dirs_exist_ok=True) # 递归遍历并同步时间戳 for root, dirs, files in os.walk(source): # 计算对应的目标路径 rel_path = os.path.relpath(root, source) dest_root = os.path.join(destination, rel_path) if rel_path != '.' else destination # 同步目录时间戳 source_stat = os.stat(root) os.utime(dest_root, (source_stat.st_atime, source_stat.st_mtime)) # 同步文件时间戳 for file in files: source_file = os.path.join(root, file) dest_file = os.path.join(dest_root, file) source_stat = os.stat(source_file) os.utime(dest_file, (source_stat.st_atime, source_stat.st_mtime)) # 使用示例 copy_folder_preserve_timestamp("源文件夹", "目标文件夹")

Node.js脚本


 
javascript
const fs = require('fs').promises; const path = require('path'); async function copyFolderPreserveTimestamp(src, dest) { try { // 创建目标目录 await fs.mkdir(dest, { recursive: true }); // 获取源目录统计信息 const srcStat = await fs.stat(src); // 读取源目录内容 const items = await fs.readdir(src); // 复制每个项目 for (const item of items) { const srcPath = path.join(src, item); const destPath = path.join(dest, item); const stat = await fs.stat(srcPath); if (stat.isDirectory()) { // 递归复制子目录 await copyFolderPreserveTimestamp(srcPath, destPath); } else { // 复制文件 await fs.copyFile(srcPath, destPath); } // 保持时间戳一致 await fs.utimes(destPath, stat.atime, stat.mtime); } // 保持目录时间戳一致 await fs.utimes(dest, srcStat.atime, srcStat.mtime); } catch (error) { console.error('复制失败:', error); } } // 使用示例 copyFolderPreserveTimestamp('./源文件夹', './目标文件夹');

4. 第三方工具

Windows工具

  • FreeFileSync:支持保持时间戳的同步
  • TeraCopy:高级文件复制工具
  • FastCopy:快速文件复制工具

跨平台工具

  • Beyond Compare:文件夹比较和同步工具
  • Total Commander:文件管理器,支持保持时间戳复制

5. 注意事项

权限问题

  • 确保有足够的权限读取源文件夹和写入目标位置
  • 某些系统文件可能需要管理员权限

符号链接处理


 
bash
# rsync处理符号链接 rsync -avL "源文件夹/" "目标文件夹/" # -L 跟随符号链接 rsync -av --copy-links "源文件夹/" "目标文件夹/" # 复制符号链接本身

大文件夹处理

  • 对于大型文件夹,建议使用进度显示
  • 考虑分批处理避免系统资源耗尽
  • 添加错误处理和恢复机制
推荐日常使用中,Windows用户使用Robocopy命令,Mac/Linux用户使用cp -a命令,这些都是系统内置且可靠的方法。对于复杂的场景或需要跨平台兼容性时,可以考虑使用脚本方式。
 

复制文件夹怎么不改变修改日期(图文)

标签:

更新时间:2025-12-15 12:35:51

上一篇:上传的文件怎么修改内容(图文)

下一篇:如何修改网页内置时间(图文)