You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何修改Shell脚本实现复制文件夹生成同名空文件并保留时间戳

问题分析

原代码存在3个核心问题:

  • 依赖ls输出遍历文件名,遇到含空格、换行、特殊字符的文件会解析异常
  • 生成的文件额外添加了.txt后缀,与原文件名不一致,不符合需求
  • 未给touch指定时间参考参数,新生成文件默认使用当前系统时间,丢失原文件时间戳

修复后代码

基础版本(仅处理原目录下的文件,不处理子目录)

# 提前创建目标目录,不存在也不会报错
mkdir -p /media/SSD/Folder_Clone

# 遍历原目录下所有文件
for file in /media/SSD/Folder/*; do
  # 仅处理普通文件,跳过子目录
  if [ -f "$file" ]; then
    filename=$(basename -- "$file")
    # 生成空文件,同时同步原文件的时间戳
    touch -r "$file" "/media/SSD/Folder_Clone/$filename"
  fi
done

exit

递归版本(保留原目录的子目录结构)

如果原目录存在多层子目录需要同步结构,使用以下版本:

mkdir -p /media/SSD/Folder_Clone

# 递归遍历所有普通文件,用null分隔避免特殊文件名解析问题
find /media/SSD/Folder -type f -print0 | while IFS= read -r -d '' file; do
  # 计算文件相对原目录的路径
  rel_path="${file#/media/SSD/Folder/}"
  # 提前创建对应子目录
  mkdir -p "/media/SSD/Folder_Clone/$(dirname -- "$rel_path")"
  # 生成空文件并同步时间戳
  touch -r "$file" "/media/SSD/Folder_Clone/$rel_path"
done

exit

核心修改说明

  • touch新增-r参数:指定以原文件为时间参考,将原文件的访问时间、修改时间完全同步到新生成的空文件
  • 移除了原代码中多余的.txt后缀,保证克隆后的文件名与原文件完全一致
  • 替换了不可靠的ls遍历方式,兼容含特殊字符的文件名
  • 新增目录预创建逻辑,避免目标路径不存在导致的报错

内容的提问来源于stack exchange,提问作者Thomas123

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.04 22:45:04