使用Shell脚本将随机文件夹结构中的最新文件复制至指定固定位置
实现需求的直接Shell脚本方案
这事儿其实挺简单直接的,用find命令配合排序逻辑就能搞定,我把完整的脚本写出来,你只需要替换掉对应的路径就能用:
#!/bin/bash # 请替换成存放随机名称文件夹的父目录(所有随机文件夹都在这个目录下) SOURCE_PARENT="/path/to/your/random/folders/parent" # 固定目标路径 DEST="/fixed/location/latestfile.jpg" # 核心逻辑:找到最新修改的文件 # 1. find遍历父目录下所有普通文件,输出"Unix时间戳 文件路径"格式的内容 # 2. sort -nr按时间戳倒序排序(最新的文件排最前面) # 3. head -n1取第一行(最新的文件条目) # 4. awk提取出文件路径部分 LATEST_FILE=$(find "$SOURCE_PARENT" -type f -printf "%T@ %p\n" | sort -nr | head -n1 | awk '{print $2}') # 检查是否成功找到文件,再执行复制 if [ -n "$LATEST_FILE" ]; then cp "$LATEST_FILE" "$DEST" echo "✅ 已成功复制最新文件:$LATEST_FILE 到 $DEST" else echo "❌ 错误:在 $SOURCE_PARENT 下未找到任何文件" exit 1 fi
关键步骤解释:
find "$SOURCE_PARENT" -type f -printf "%T@ %p\n":递归查找父目录下所有普通文件,用%T@输出精确到毫秒的Unix时间戳,搭配文件路径,这样排序更精准。sort -nr:对时间戳进行数字倒序排序,确保最新修改的文件排在第一行。awk '{print $2}':从排序后的第一行里提取出文件的完整路径,忽略前面的时间戳。- 最后的判断逻辑是为了避免当目录下没有文件时,
cp命令执行出错。
额外优化建议:
如果你的目标文件类型固定是.jpg,可以在find命令里加个过滤条件,避免误抓其他类型文件:
LATEST_FILE=$(find "$SOURCE_PARENT" -type f -name "*.jpg" -printf "%T@ %p\n" | sort -nr | head -n1 | awk '{print $2}')
内容的提问来源于stack exchange,提问作者ChrisB
相关产品推荐
相关产品推荐

