如何升级find命令:记录机器可读格式mtime与文件名并删除目录
改进后的find命令方案
方案1:一次性完成记录与删除
使用find的-exec参数同时实现信息记录和目录删除,确保记录与删除的目标完全一致:
find "$path" -depth 2 -type d -mtime +"$days" -exec sh -c ' for dir do # 以「时间戳|目录路径」的机器可读格式写入日志 printf "%s|%s\n" "$(stat -c %Y "$dir")" "$dir" >> /your/log/path/delete_record.txt # 强制删除目录及内容 rm -rf "$dir" done ' sh {} +
参数说明:
stat -c %Y "$dir":获取目录修改时间的Unix时间戳(秒级,机器易解析);若需ISO标准格式,可替换为stat -c %y "$dir"(输出示例:2024-05-20 14:30:00.000000000 +0800)printf "%s|%s\n":用竖线分隔时间戳与路径,避免空格或特殊字符干扰解析rm -rf "$dir":适配非空目录的强制删除场景{} +:批量传递找到的目录给shell脚本,提升执行效率
方案2:先记录再删除(分离操作)
如果需要先确认记录内容再执行删除,可拆分两步操作:
- 生成机器可读的待删目录清单:
find "$path" -depth 2 -type d -mtime +"$days" -printf "%T@|%p\n" > /your/list/path/delete_list.txt
%T@:直接通过find输出修改时间的Unix时间戳,比调用stat更高效%p:输出目录的完整绝对路径
- 根据清单删除目录:
while IFS='|' read -r mtime dir; do rm -rf "$dir" done < /your/list/path/delete_list.txt
注意事项:
- 给
$path和$days变量添加双引号,避免路径含空格或特殊字符时出现错误 - 替换日志/清单文件的实际存储路径,确保当前用户有写入权限
- 测试阶段可先移除
rm -rf命令,仅执行记录操作,确认目标目录无误后再添加删除逻辑
内容的提问来源于stack exchange,提问作者Hacker
相关产品推荐
相关产品推荐

