复制文件夹怎么不改变修改日期(图文)
复制文件夹时保持原有的修改日期有以下几种方法:
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 "源文件夹/" "目标文件夹/" # 复制符号链接本身大文件夹处理
- 对于大型文件夹,建议使用进度显示
- 考虑分批处理避免系统资源耗尽
- 添加错误处理和恢复机制

更新时间:2025-12-15 12:35:51
上一篇:上传的文件怎么修改内容(图文)
下一篇:如何修改网页内置时间(图文)
