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

Bash Shell脚本如何获取目录最新修改文件并拷贝到其他目录?

Bash脚本实现方案

需求匹配的完整实现

你原有的代码存在语法错误,for循环、if判断的写法都不符合Bash语法规范。以下是符合「比对文件修改日期与当前日期,一致则拷贝」需求的可运行脚本:

#!/bin/bash
# 替换为你的实际源目录、目标目录路径
SRC_DIR="/your/source/directory/path"
DEST_DIR="/your/destination/directory/path"
# 获取格式化后的当前日期(年月日)
CUR_DATE=$(date +%Y%m%d)

# 遍历源目录下所有内容
for FILE in "$SRC_DIR"/*; do
  # 仅处理普通文件,跳过目录、软链接等
  if [ -f "$FILE" ]; then
    # 获取文件修改日期,格式与当前日期对齐
    # macOS系统请替换为:FILE_DATE=$(date -r $(stat -f %m "$FILE") +%Y%m%d)
    FILE_DATE=$(date -d "@$(stat -c %Y "$FILE")" +%Y%m%d)
    # 日期匹配则拷贝,-p参数保留文件属性,可按需删除
    [ "$FILE_DATE" = "$CUR_DATE" ] && cp -p "$FILE" "$DEST_DIR/"
  fi
done

这个方案兼容性强,如果你需要对匹配的文件做额外操作(比如打印日志、重命名),可以在拷贝逻辑前后扩展代码。

更简便的实现方式

如果不需要额外自定义逻辑,直接用find命令一行就能完成需求,效率比循环遍历更高:

# GNU/Linux 环境使用
find /your/source/directory -maxdepth 1 -type f -daystart -mtime 0 -exec cp -p {} /your/destination/directory \;

参数说明:

  • -maxdepth 1 仅扫描当前目录,不进入子目录,不需要可删除
  • -type f 仅匹配普通文件
  • -daystart -mtime 0 筛选当日零点后修改的所有文件
  • -exec cp ... 将匹配到的文件直接拷贝到目标目录

如果是macOS环境,使用如下命令:

# macOS 环境使用
find /your/source/directory -maxdepth 1 -type f -mtime -1d -exec cp -p {} /your/destination/directory \;

特殊场景简化:仅拷贝最新的1个当日文件

如果你的需求仅需要拷贝目录里最新的一个当日生成文件,可以用更短的逻辑实现:

#!/bin/bash
SRC_DIR="/your/source/directory/path"
DEST_DIR="/your/destination/directory/path"
# 取目录下最新的文件
NEWEST_FILE=$(ls -Art "$SRC_DIR" | tail -n 1)
FULL_PATH="$SRC_DIR/$NEWEST_FILE"
# 判断为普通文件且是当日修改则拷贝
if [ -f "$FULL_PATH" ] && [ $(date -d "@$(stat -c %Y "$FULL_PATH")" +%Y%m%d) = $(date +%Y%m%d) ]; then
  cp -p "$FULL_PATH" "$DEST_DIR/"
fi

注意事项

  • 所有路径建议填写绝对路径,避免脚本执行时工作目录变动导致报错
  • 变量都做了引号包裹,适配带空格、特殊字符的文件名场景
  • 可以给cp添加-n参数,避免覆盖目标目录下的同名文件

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 16:15:03