#!/bin/bash
# 目标目录,包含大量文件名
source_dir="your_source_directory"
# 目标移动目录
target_dir="your_target_directory"
# 计算一周前的时间戳
one_week_ago=$(date -d "1 week ago" +%s)
# 使用find命令查找文件并移动
find "$source_dir" -maxdepth 1 -type f -name 'backup_*' -newermt "$(date -d @$one_week_ago +%Y-%m-%d)" -exec bash -c '
for file do
target_path="'$target_dir'"/"$(basename -- "$file")"
mv -n "$file" "$target_path"
done
' _ {} +
优化思路
- 使用
find
命令:find
命令在查找文件方面非常高效。通过-maxdepth 1
选项,我们只在源目录的顶层查找文件,避免递归查找子目录,这在处理大量文件时可以显著提高性能。
- 时间比较:使用
-newermt
选项,结合一周前的时间戳来筛选出最近一周内修改的文件。
- 文件名处理:使用
basename
和mv -n
。basename
确保目标文件名正确,mv -n
防止覆盖目标目录中已存在的同名文件。
- 减少进程启动次数:在
find
的-exec
选项中,通过bash -c
和for
循环一次性处理所有找到的文件,而不是为每个文件单独启动一个mv
进程,这样可以减少系统开销,提高脚本执行效率。