上一篇
凌晨两点,服务器监控突然报警——某业务日志目录爆满,急需清理旧日志文件,你打开终端一看,几百个形如service_log_20230101.txt
的文件散落在多级子目录中,需要统一改成archive_20230101.log
,手动一个个改?怕是天亮了都搞不定,别慌,掌握下面这些命令,分分钟搞定递归批量重命名!
备份!备份!备份!
执行任何批量操作前,先压缩原始目录以防翻车:
tar -czvf backup_logs.tar.gz /path/to/logs
安装必备工具
CentOS默认已带find
和rename
,但建议确认版本(GNU版本功能更全):
rename --version # 非GNU版本需安装:sudo yum install prename
find
+ rename
(推荐)目标:将所有子目录中的.txt
后缀改为.log
,并在文件名前添加archive_
前缀
find /path/to/logs -type f -name "*.txt" -exec rename 's/(.*)\/(.*)\.txt$/$1\/archive_$2.log/' {} \;
find /path/to/logs
:从指定目录开始递归查找 -type f -name "*.txt"
:只找普通文件且后缀为.txt rename 's/原模式/新模式/'
:用正则表达式替换 (.*)\/(.*)\.txt$
:匹配“路径/文件名.txt” $1\/archive_$2.log
:保留路径($1),添加前缀并修改后缀 find
+ mv
(兼容性更强)目标:将文件名中的2023
替换为2025
find /path/to/logs -type f -name "*2023*" | while read file; do newfile=$(echo "$file" | sed 's/2023/2025/g') mv "$file" "$newfile" done
bash
循环(适合简单操作)目标:给所有.conf
文件添加.bak后缀
for f in $(find /etc -type f -name "*.conf"); do mv "$f" "${f}.bak" done
空格文件名处理:
遇到含空格的文件名时,用find -print0
和xargs -0
组合:
find /path -type f -print0 | xargs -0 rename 's/old/new/'
权限问题:
若提示权限不足,可结合sudo
或先检查目录权限:
find /path -type d -exec ls -ld {} \;
测试先行:
用-n
参数模拟执行,确认无误后再真实操作:
rename -n 's/pattern/replace/' *.files
按时间批量重命名:将修改时间超过30天的日志文件标记为过期
find /var/log -type f -mtime +30 -exec rename 's/(.*)/$1.expired/' {} \;
大小写转换:将所有.JPG改为.jpg
rename 'y/A-Z/a-z/' *.JPG
掌握这些命令后,下次再遇到“十万个文件要改名”的需求时,你大可以淡定地泡杯咖啡,敲几行命令,深藏功与名,高效运维的核心不是手速,而是知道如何让机器替你干活!
(本文基于CentOS 7/8及主流GNU工具版本验证,2025年8月更新)
本文由 宗雪 于2025-08-01发表在【云服务器提供商】,文中图片由(宗雪)上传,本平台仅提供信息存储服务;作者观点、意见不代表本站立场,如有侵权,请联系我们删除;若有图片侵权,请您准备原始证明材料和公证书后联系我方删除!
本文链接:https://vps.7tqx.com/wenda/506852.html
发表评论